From bc240fc0637516c14a3715828ed17b08a0a62bf5 Mon Sep 17 00:00:00 2001 From: Craig Loftus Date: Fri, 3 May 2019 16:08:54 +0100 Subject: [PATCH] Adding recording to hits for validation and login --- README.rst | 35 +- pwned/admin.py | 9 + pwned/backends.py | 27 ++ pwned/migrations/0001_initial.py | 24 ++ pwned/migrations/__init__.py | 0 pwned/models.py | 12 + pwned/settings.py | 5 +- pwned/validators.py | 17 +- setup.py | 2 +- tests/cassettes/test_login_hit.yaml | 324 ++++++++++++++++++ .../test_login_hit_recording_disabled.yaml | 323 +++++++++++++++++ .../test_validator_found_no_error.yaml | 324 ++++++++++++++++++ tests/cassettes/test_validator_hit.yaml | 324 ++++++++++++++++++ ...est_validator_hit_but_under_threshold.yaml | 323 +++++++++++++++++ ...st_validator_hit_no_user_not_recorded.yaml | 323 +++++++++++++++++ .../test_validator_hit_recorded_no_user.yaml | 323 +++++++++++++++++ ...test_validator_hit_recorded_with_user.yaml | 323 +++++++++++++++++ ...test_validator_hit_recording_disabled.yaml | 323 +++++++++++++++++ tests/fixtures.py | 13 + tests/test_backends.py | 40 +++ tests/test_validators.py | 55 ++- tox.ini | 4 + 22 files changed, 3143 insertions(+), 10 deletions(-) create mode 100644 pwned/admin.py create mode 100644 pwned/backends.py create mode 100644 pwned/migrations/0001_initial.py create mode 100644 pwned/migrations/__init__.py create mode 100644 pwned/models.py create mode 100644 tests/cassettes/test_login_hit.yaml create mode 100644 tests/cassettes/test_login_hit_recording_disabled.yaml create mode 100644 tests/cassettes/test_validator_found_no_error.yaml create mode 100644 tests/cassettes/test_validator_hit.yaml create mode 100644 tests/cassettes/test_validator_hit_but_under_threshold.yaml create mode 100644 tests/cassettes/test_validator_hit_no_user_not_recorded.yaml create mode 100644 tests/cassettes/test_validator_hit_recorded_no_user.yaml create mode 100644 tests/cassettes/test_validator_hit_recorded_with_user.yaml create mode 100644 tests/cassettes/test_validator_hit_recording_disabled.yaml create mode 100644 tests/test_backends.py diff --git a/README.rst b/README.rst index 3ccef10..ff967f4 100644 --- a/README.rst +++ b/README.rst @@ -2,12 +2,18 @@ Django Pwned Passwords Validator ================================ This package provides a password validator for Django that checks submitted -passwords against the `Pwned Passwords API `_. +passwords against the `Pwned Passwords API `_ +to help your users protect themselves against credential stuffing attacks. To protect the security of the password being checked a range search is used. Specifically, only the first 5 characters of a SHA-1 password hash are sent to the API. The validator then locally looks for the full hash in the range returned. +The package also provides a custom authentication backend that wraps the +standard model backend so passwords of existing users can be checked when +they login. + + Installation ~~~~~~~~~~~~ @@ -15,7 +21,8 @@ Installation pip install django-pwned-validator -Modify your `settings.py` to install the app and enable the validator: +Modify your `settings.py` to install the app, then add the validator and +the custom authentication backend: .. code-block:: python @@ -31,7 +38,29 @@ Modify your `settings.py` to install the app and enable the validator: ... ] + AUTHENTICATION_BACKENDS = [ + 'pwned.backends.PwnedModelBackend', + ] + +We would also suggest removing the `CommonPasswordValidator` as it fills a +very similar role and this validator uses the same help text. + + +Settings +~~~~~~~~ + +.. code-block:: python + + PWNED = { + 'ENDPOINT': 'https://api.pwnedpasswords.com/range/', + 'OCCURRENCE_NOTIFY_THRESHOLD': 1, # How many occurrences cause a validation error + 'PREFIX_LENGTH': 5, + 'RECORD_HITS': True, + 'TIMEOUT': 2, # The default is conservative but will cut off some requests; typical is 200ms + 'USER_AGENT': 'github.com/craigloftus/django-pwned-validator', + } + Compatibility ~~~~~~~~~~~~~ -Supports Django 1.11.x and 2.0 on Python 3.5 and 3.6. +Supports Django 1.11, 2.0, 2.1 and 2.2 on Python 3.5 and 3.6. diff --git a/pwned/admin.py b/pwned/admin.py new file mode 100644 index 0000000..5e60d1c --- /dev/null +++ b/pwned/admin.py @@ -0,0 +1,9 @@ +from django.contrib import admin + +from .models import PwnedRecord + + +@admin.register(PwnedRecord) +class PwnedRecordAdmin(admin.ModelAdmin): + list_display = ('email', 'created', 'count', 'notified',) + diff --git a/pwned/backends.py b/pwned/backends.py new file mode 100644 index 0000000..29e58b3 --- /dev/null +++ b/pwned/backends.py @@ -0,0 +1,27 @@ +from django.contrib.auth.backends import ModelBackend + +from .client import PwnedClient +from .models import PwnedRecord +from .settings import get_config + + +class PwnedBackendMixin: + + client = PwnedClient + + def authenticate(self, request, username=None, password=None): + user = super().authenticate(request, username=username, password=password) + # If authenticated, check supplied password against API + if user and password: + pwned_client = self.client() + count = pwned_client.count_occurrences(password) + if count and get_config()['RECORD_HITS']: + PwnedRecord.objects.create( + email = user.email, + count = count, + ) + return user + + +class PwnedModelBackend(PwnedBackendMixin, ModelBackend): + pass diff --git a/pwned/migrations/0001_initial.py b/pwned/migrations/0001_initial.py new file mode 100644 index 0000000..41b1549 --- /dev/null +++ b/pwned/migrations/0001_initial.py @@ -0,0 +1,24 @@ +# Generated by Django 2.2 on 2019-05-03 13:21 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='PwnedRecord', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('email', models.EmailField(blank=True, max_length=254)), + ('count', models.PositiveIntegerField(db_index=True)), + ('notified', models.BooleanField(db_index=True, default=False)), + ('created', models.DateTimeField(auto_now_add=True)), + ], + ), + ] diff --git a/pwned/migrations/__init__.py b/pwned/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pwned/models.py b/pwned/models.py new file mode 100644 index 0000000..40fb232 --- /dev/null +++ b/pwned/models.py @@ -0,0 +1,12 @@ +from django.contrib.auth import get_user_model +from django.db import models + + +UserModel = get_user_model() + + +class PwnedRecord(models.Model): + email = models.EmailField(blank=True) + count = models.PositiveIntegerField(db_index=True) + notified = models.BooleanField(db_index=True, default=False) + created = models.DateTimeField(auto_now_add=True) diff --git a/pwned/settings.py b/pwned/settings.py index f0ac994..8620760 100644 --- a/pwned/settings.py +++ b/pwned/settings.py @@ -5,9 +5,10 @@ DEFAULTS = { 'ENDPOINT': 'https://api.pwnedpasswords.com/range/', - 'TIMEOUT': 2, # The default is conservative but will cut off some requests; average is 280ms + 'OCCURRENCE_NOTIFY_THRESHOLD': 1, # How many occurrences cause a email or validation error 'PREFIX_LENGTH': 5, - 'OCCURRENCE_THRESHOLD': 1, # How many occurrences is too many + 'RECORD_HITS': True, + 'TIMEOUT': 2, # The default is conservative but will cut off some requests; typical is 200ms 'USER_AGENT': 'github.com/craigloftus/django-pwned-validator', } diff --git a/pwned/validators.py b/pwned/validators.py index e6bca87..ef5eff0 100644 --- a/pwned/validators.py +++ b/pwned/validators.py @@ -3,17 +3,28 @@ from django.utils.translation import gettext_lazy as _ from .client import PwnedClient +from .models import PwnedRecord from .settings import get_config @deconstructible class PwnedValidator: - message = _('This password is known to be weak') - code = 'invalid' + message = _("This is a commonly used password") + code = "invalid" client = PwnedClient def validate(self, password, user=None): pwned_client = self.client() count = pwned_client.count_occurrences(password) - if count >= get_config()['OCCURRENCE_THRESHOLD']: + + if count and user and get_config()['RECORD_HITS']: + PwnedRecord.objects.create( + email = user.email, + count = count, + ) + + if count >= get_config()['OCCURRENCE_NOTIFY_THRESHOLD']: raise ValidationError(self.message, code=self.code) + + def get_help_text(self): + return _("Your password can't be a commonly used password.") diff --git a/setup.py b/setup.py index 0f8a53f..149eb14 100644 --- a/setup.py +++ b/setup.py @@ -20,7 +20,7 @@ 'requests', ], extras_require={ - 'test': ['django<2.1', 'pytest', 'pytest-cov', 'pytest-django', 'pytest-vcr',], + 'test': ['django<2.3', 'pytest', 'pytest-cov', 'pytest-django', 'pytest-vcr',], }, classifiers=[ 'Environment :: Web Environment', diff --git a/tests/cassettes/test_login_hit.yaml b/tests/cassettes/test_login_hit.yaml new file mode 100644 index 0000000..cb4f2ae --- /dev/null +++ b/tests/cassettes/test_login_hit.yaml @@ -0,0 +1,324 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - github.com/craigloftus/django-pwned-validator + method: GET + uri: https://api.pwnedpasswords.com/range/5BAA6 + response: + body: + string: !!binary | + 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 + headers: + Access-Control-Allow-Origin: + - '*' + Arr-Disable-Session-Affinity: + - 'True' + CF-Cache-Status: + - HIT + CF-Ray: + - 4d130a070cf9bb88-LHR + Cache-Control: + - public, max-age=2678400 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - text/plain + Date: + - Fri, 03 May 2019 14:49:01 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - Mon, 03 Jun 2019 14:49:01 GMT + Last-Modified: + - Wed, 16 Jan 2019 07:29:47 GMT + Server: + - cloudflare + Set-Cookie: + - __cfduid=d0fe8b239b44e0b59cb3491492047ed001556894941; expires=Sat, 02-May-20 + 14:49:01 GMT; path=/; domain=.pwnedpasswords.com; HttpOnly; Secure + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Powered-By: + - ASP.NET + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_login_hit_recording_disabled.yaml b/tests/cassettes/test_login_hit_recording_disabled.yaml new file mode 100644 index 0000000..bb22ca4 --- /dev/null +++ b/tests/cassettes/test_login_hit_recording_disabled.yaml @@ -0,0 +1,323 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - __cfduid=d0fe8b239b44e0b59cb3491492047ed001556894941 + User-Agent: + - github.com/craigloftus/django-pwned-validator + method: GET + uri: https://api.pwnedpasswords.com/range/5BAA6 + response: + body: + string: !!binary | + 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 + headers: + Access-Control-Allow-Origin: + - '*' + Arr-Disable-Session-Affinity: + - 'True' + CF-Cache-Status: + - HIT + CF-Ray: + - 4d130fc7ae4dce7f-LHR + Cache-Control: + - public, max-age=2678400 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - text/plain + Date: + - Fri, 03 May 2019 14:52:56 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - Mon, 03 Jun 2019 14:52:56 GMT + Last-Modified: + - Wed, 16 Jan 2019 07:29:47 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Powered-By: + - ASP.NET + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_validator_found_no_error.yaml b/tests/cassettes/test_validator_found_no_error.yaml new file mode 100644 index 0000000..745a6e3 --- /dev/null +++ b/tests/cassettes/test_validator_found_no_error.yaml @@ -0,0 +1,324 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - github.com/craigloftus/django-pwned-validator + method: GET + uri: https://api.pwnedpasswords.com/range/5BAA6 + response: + body: + string: !!binary | + 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 + headers: + Access-Control-Allow-Origin: + - '*' + Arr-Disable-Session-Affinity: + - 'True' + CF-Cache-Status: + - HIT + CF-Ray: + - 4d12b8ae3800bb88-LHR + Cache-Control: + - public, max-age=2678400 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - text/plain + Date: + - Fri, 03 May 2019 13:53:29 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - Mon, 03 Jun 2019 13:53:29 GMT + Last-Modified: + - Wed, 16 Jan 2019 07:29:47 GMT + Server: + - cloudflare + Set-Cookie: + - __cfduid=d964c813548450262806aea103404b6cf1556891609; expires=Sat, 02-May-20 + 13:53:29 GMT; path=/; domain=.pwnedpasswords.com; HttpOnly; Secure + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Powered-By: + - ASP.NET + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_validator_hit.yaml b/tests/cassettes/test_validator_hit.yaml new file mode 100644 index 0000000..b6ede5e --- /dev/null +++ b/tests/cassettes/test_validator_hit.yaml @@ -0,0 +1,324 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + User-Agent: + - github.com/craigloftus/django-pwned-validator + method: GET + uri: https://api.pwnedpasswords.com/range/5BAA6 + response: + body: + string: !!binary | + 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 + headers: + Access-Control-Allow-Origin: + - '*' + Arr-Disable-Session-Affinity: + - 'True' + CF-Cache-Status: + - HIT + CF-Ray: + - 4d12d13c291ace63-LHR + Cache-Control: + - public, max-age=2678400 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - text/plain + Date: + - Fri, 03 May 2019 14:10:15 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - Mon, 03 Jun 2019 14:10:15 GMT + Last-Modified: + - Wed, 16 Jan 2019 07:29:47 GMT + Server: + - cloudflare + Set-Cookie: + - __cfduid=d310f3995592b10f8eebc24787a44879f1556892615; expires=Sat, 02-May-20 + 14:10:15 GMT; path=/; domain=.pwnedpasswords.com; HttpOnly; Secure + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Powered-By: + - ASP.NET + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_validator_hit_but_under_threshold.yaml b/tests/cassettes/test_validator_hit_but_under_threshold.yaml new file mode 100644 index 0000000..7a6598f --- /dev/null +++ b/tests/cassettes/test_validator_hit_but_under_threshold.yaml @@ -0,0 +1,323 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - __cfduid=d310f3995592b10f8eebc24787a44879f1556892615 + User-Agent: + - github.com/craigloftus/django-pwned-validator + method: GET + uri: https://api.pwnedpasswords.com/range/5BAA6 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/InZ27j39 + 9OD0yf37O58enNy7d3xyuvNwb//B6en+yaf3Ht7b+fTJo3u/cbKzu3ey+3Dvyd6z3U+fHeydHu+c + Pnl4+mz34OnDp/fvPXyy8/Tpo100u3dv5+TTg4en959+uv/s0093nn76cP/B8cN7x08/vbd/+uzg + mTR7ePBg/+DZvXu795/t7zzZPd7d2XtC0E4J8O7D/ZOnD6XZs4c79+49uXeyQ0DvP33y7OmnT3ef + nuw/3dt7uHvw7P7pw0d71Gx/b//pk4cHJw+Odw72P326d/LpyYP7p58+fEAjOd45Obl3+ug+mu0f + Hzw7vXdwsHt6+mzn6ZOT49O9/f0nz/Y+3T15+mD/6dMHAu3BMwJ/jFZ7D/Yf7N2/9+zhwcMHT4/v + HTzc/5Re2WXc9o/vPTj+9MGnp/eINCcPgNS9T08e3nv25OlD6vb43ol0eny6s3//ye69/SeE+L2d + /XtP9nY/PT4l2uzu7Jye7uxwp/d3iKYPD06fPiBS7Ow8fXhv78nuzrMHD3YePL334NmzJ/sMjUj9 + 7ODTZ/d3Hx4fU6c793aePNg7OHm6/+Bg597p/Sd7e9Js/3jnydP79073npwc3Ds+eHD67OkJoXe6 + 93Rnnwi1c8Bzev/4+ODe/acnD/f37t3boxGenuyePHl67+DZ8cOHTw4O7u3zSO+f7uwe7D09JXLR + +3vPPj19eu/+3sEOEfDk3oOd3QcPH+1TswcHz57de0ITRYTc/ZTI+PDBp08fPH1w/9OHn3764JSI + zNAePLz/6VOi58nDPZq4T3c/fXjvdPfk4OEO9bq79/Tezqk0O36wt3f/yYMHDzBDDx5++uzpvWdE + nIcnuw+Ie57cV2hP9sBiD4j4+7tPTp/cI7Y8efJs5/j+/RPC+f6zJ0xeYud7JwcnB5/eOzl+en/n + 5Jiwu39MdH3w8JReeXLy8NGnaPbs+Omzh5/uPDveox6Icx8Sszy8v/fgAc3dyf1nNFno9ODB7jER + 7ODBCSF378GTB8efPjt9cHr/wcnxw0+Pd/cfSjNCde/BKVGZXry3d7rzbO+UKH3yKZHl6f6z+0Ql + xu3JHs3DvZNnu/eJDfef7pweE6scEC327x2TYO0cP5VmT/YOPn26TxTZI/k6ePjwgMZ9+uB0f/8+ + jWlvZ1fodkJzTzPx6ekDEpTj3ae790+fPfj04NP90/ufEjV2nwluJ/eJGk/vPzx+QGTZvf/k5Nne + w9OTPZrAk4c0sbvPPuVOT54cnz453vmUJp2UwbN7+PWEOOkhfXp/7z7JBEN7tvuQPjq5f/x0/+D4 + /sHBg4cnJCk7NC+fQkppLqUZieje8cM9ArSz/5Qo+OzhvXvHD/aJ+x58Sprg9D6zJSmJByenJw+f + Pdm5t0sEpf+R0rlH8vBkZw+IfvroAM2eEks8ePJk//TJwf6z4+MnT4gvSL5I8k93n+0dHDC03V0a + /CkppL1nJJz3Ccunnz4j1jrY2XnycOfZzsN7TyAyu7sPduhDmiTipANinwenx5+C1nukBB48e3Lw + dB8E2d09efjw4c7p7s4BM8vBw/u79w+enhKdHu7g3d0d6ZTotfeUJOMB9UjvHhP/3ds5uH+6t3uy + f/8BEZ2h7T0ljJ9SN6Td7hGSJ3sPjolbHlDvuweffvrk2T2Gdm/n0yf792k+Dw52TmjGTz59+OTT + /YNTUhcn+wekvFkNkop5drBPGuPg2R4xIsnBHjEIzfiDe7unROt7Mqe79+4T6k+J5053759Qgyd7 + D++RSqEBPSTe2bn3jPXb7r0H+/uf7hJsmgIC9eCYej3ZeXZyTDL4dP/h7umx4HZCQvLg0+MD0i3P + HhI/Ef67x0+Pd45JS9CUUacM7dmzHYJBloBQIxYg+T7e3yUe2qXG+6fHe2w+dvd3Pt2nGTslFtm7 + d58U3KcPSTN/uv/w0/sPSbHv3CfcdrgdKYQTMhO7pOSf7T54cp/k6/7OQ7IKu7AGosp395/s7hMH + Ptvfffbs2cG9T++dPnz44CGZiKf7J6TuiNOl12enOydP7z3d/ZSGc/8h6aH9J1BQD3ZOiNg0MTL3 + 9x88I+Xw7D7Zo4OdU3DHs2PSc09Jozw7OL1H1GNo90mzHDy9R1x7Qpz2kEZ5sP+UfiO9TobuwQlp + rodoRjz27Cn1sn+fNP/J05MHuyf3dsk+ndBL1MvTe9zppzR/nz6lMd4jq0JTsb/74Ol9MPzevZ37 + pAVPiCLU7MGT4wcPnuwfP312enLvPimOg2e7NMh7pwSQ5IQ0gjQ7JRk53SfOJOVK1vH+E9LQJBww + D7snO6RTeFIP7j27j2neefDg+B71TKbr5Mk9koinZDB2T07un0qz/RNiOuK642f4cvchTdcuzRFp + ugcPTkmOhC9J09B0nZJQHpNSPvn0ycOn946fEKs8fHpAXLz3qfDlwyfHu8/uHRDJdw8IDJnUJ4Tg + LvV58unxvf0HxOXo9CGZTOHLA+J24mwy1KQO7z249+kJOSenJzJZBJ9aPiGmJn35KU3V02f798gW + HtMkPt072SOfAAQ5IRnc//RkZ2+fFNB9kuqHT3d3yDjvPX16SsxCosjQTp482Ll///4ucTcR7wlN + B/UNvfNwZ58cDYIszUjFkGkndiT9/eRTIhX5VSTFx/TfAzLxqpKe7j093t8hiSeP6MGnzz69T14E + +TXH9MK9/SekJI4Z2tMHeyc0BYTW/u6nND9kNknRPyS1cP+ExIuUlQgDtSdhIv54sLdPCuL05AHR + 4YSk+QkpRxLuB3s81NN7nx48oFl68uzk9N79Z6RDHuzvHJD62t0h+0tUF/YljifdcY/UBTmE4JIn + RNcD8tSePDg9JWF6Sr7Dp/ukLsjmk5p98il5jwekfckZJNk5JQXLDiIBIKfqgKWf5PbhA+Kok92d + Y7IkpKJ2waq7xAY7RGJ0Arrs0aCe0PTvnN6/f/r0eJc80QfEqffJLj28t3t/5/gBz9nezrNnJJ73 + 7+8/eEaMce+EVD2ZBTIucHf2iQpEF2q2R0M7uUfG7d4TcixJ+T4j+KQhdu5/SjYZvMad7pGPd+/+ + p3sPPiWf5z4pC3K6yKV6svNwh3zAh8eiwMg2HDyhgd3ff3JC8rdDs7V//9kesQ1ZPlLtT3f2Bdrp + 04P7e6cP9ojy954dPL1//x6JOFmZk/t79/cJVeaAPbJbZJF2PyUF/GCHBOgeEf346fGTgyf7uyQ2 + nz54Bg7Y2ycv6lOSS9IO5Fd+erxz7+DJA1I5p6S8T3fISWMPYo+cCphS6vzJ6dNPaWgktAfUAzl0 + 5PmRzr7PQ9i/t/eQfLmD4wN4YPvPnu6QFt47/ZRcb3L6Tp+dsDEnl5js8wnR6dnDPfoOHihZiae7 + nz452CVGo8mVZk/I0z3ZPz4hpiTn4t4OccynZAHIwJEDQAJ7DK9w7/4x/JaTg2f75EiTA7ZHIkPj + Jr5+dv/TJ/v7u+zp75E5I3P/ZI/mnRAjPfuQuJwEe5dE4CGx+969RySBpDf3yNQ8Oz65f0Ke1xNS + Uk/Jz3hClm7vhLTAp/d2SOiZJqRBiRr39qADPz09hrI4fkYe4oMdclpIXnd3eSJIxVOMckKE4KCH + 9BYxCTlZNISdZ/vkvxHpuN2nO7v7ZG5IxezdP3hySmQgLf0pqTCSAJqhY+GSBycktfc+fbJzH2L4 + lFTEHrl6NGOf0ngPnuydsC+3R07S7n1S4c/2Dwg3avz04R75zScnz57QyA92SalzM3Iud4+pwTEN + mqIokoBjMhbEJmTljmlWduC17sGC0ER+SobrGcEiBXz67OH9hztP7t9/SgQnaYGHs/fwwacwPsRI + NK33SIvSG6R4SLr3PiWG2HvAJnjv+P6zk09PyOYdkMV69inFXOQok8CQR0URHCmOk0cP0Oxkn9ie + tC5JPumLhyRsBzTD5LoQ25HuIZcP00/+KzlPJ/cIEUJml2wumZ5n5Pec3CN1v3vyhA3OHnH1k3s7 + pNRP9snmEMlILEmvfrpP00esc/rpHo+U/iC9RxJKQePOwcGnu4TPw717+w/JH7i3S5PMVm7vhASe + yL1z+pQiTBKKp/s0tU9pCsmp3yPpOWCzv/eUHBWadRiYA1Jd5E5QJHxCuO6TCb+/T8YCzWiQT0ly + n5LxJREDcz7YJdG59+kxdb17QEqCoZGPdnyAt+8/o+CHwJKuI+UBT/30KSk+Ih7mFHrsHtlMsn6f + kt6jMOTTe+SYknL8dGdnf2ePzL80O35AMRfZwL2dk3tkEJ/eJx2xR/Ed6WniJaIqd0rccQAHmSwT + HEmCeHx8svf0U1K8pBpJ4NgCk9zvkLtAXL1LTjWFD58+2D+BS7vz5AFpIHIWHmAW7tHE7Nwjk0Um + ff/gCUVBDx6S8NJ7T4jvPiXFQJIPcPf2iCLPiGfg7z2hmXtKTguR9v4BwSaJI3VOs3WP6Eau/LO9 + ZySpD+AhANm9PTKw9/fIxyIigS/vkUGldMHOHpninXvPjp8+ePLkhEIYGjv5PQ93iKA81PtkgEhE + nu5S1EEG69P9T4mxyat/Su4xuTXHEpshMCV2ON3Z26WAgFqRhSU7QZH7CdmBA+LmA2m2/+nJPmmM + Jzv05v6zB6cPycM4gI9AnE/6nYaAkd5/8HSH9NB9SjcQ1XZPybYQJ+3cI455Smb32QOF9pAUyDMy + BDsPTp4hyUEqgATp5B65Z6TIjmlSQV+a5AcPSU+SwnhA3EaamahBIv7wwZNdkmKaCYb2KSFDEQ/N + 9ylRgLj94T3iezLaFCk8eXJA/XOzB/Q16V0yVeSQ7jwlVUP6kKINkinySmhi2Ae+94A06v0HxHZk + s093944pB/H0U/JJ98gG0DQfPNmFoN47uP/gHon4LlmJJ/fukZp5QkkIsq9P4bRSFoFmAXN6QAb6 + ycHx3t7OE3IlCfQJjfMpRTkU6j8jP29PhOH44PgpORLkgx4/vU8DIe3x7CHxOXQseTIP98nUUAxH + zhLNCmUWdkj+dp+cUF+f0tw/IS+TzCfxwB4rwntPdp/s3SeVQi41EW5nlywHpUFInRAnE79QYMS9 + PqVA6tmz06dPnzyBdni4S+qDFCwZfIo8dnY+3XvG0/D0KbH8yTPKgjzbIaJTVI5oa4/s2xNyiE6O + iSLwq8ginlKASLzzhBztfXiOZIIpUHy6RxEcWYaHbKTJ6mG2n5AFIcvy5BSx9Kf3yRN7SgHcCanL + U1a/pHaJwKT3SD52Th8+JX+dOODJwT0aPXnYJ/eOOVNBeo0cohOS8R3y7ckrIcN17/79UwrMnh5T + +ouRQzNS2xQ8HtzbfUBeHMWeD0hhP6R3KGFCBCH/SpqdkvF5QpbhgCzX/fsP7pPzS1NPyQIaCDni + z0iiqRkZ5B3ykO/df0JOE3ESRZc75OUQI+zSTFMOgxmTbDUZrn0iJnl/xBz3PyVbTak94i4kNp7u + UfRArLS/e0Ka4AExD+Wf9p+R4/XwCfk2p+iS2n56vMe2kmKyY1KZD4hMe+RQIoIiRUZOy+6DfYoV + iN73wHGk9I6PSexhjB6eHpNVIIO7c0oOGGW5Pn1IsQGNFL3uP6EI//7pvV1CigLA+3s0oeRhEzVJ + sMk87bInv39//ympfIpZT/bIB6XogQIJik4ODigavE92boetIEUDpIh2TvcPKFB8cu/Tp2TiKdan + xMcxWVsKI0kciJX2P72/T4aHOIe44ZTcKlK6u08J7v2nJ2SDyTm4zxT5lAhKfgbZ2/v3yHCQqqDw + kCZw/+npPcp3PtljUSVLROxN/ACaPaBg5WT/3v79PTJZFFodPyEySzOaXwqbiCOJHY4p50LokJ7A + HxQuPTwhceQhkP4kP+X43sm9e/eJvmRoHpL792z/4R645glF69yMbOKTe892d+kf0tLE7ruU2CKb + ekqcTBNI3hZ3+nAfComiAxLpE0oZPCETQjaYvH8m3n1yk7nZg9PdT4m/CPH7lL6lSYNuIy0MFEhj + 02yR90DNnj2jOPeAhvwp6f5nFPoiXKIZvv+M3Of7DzmeIjpSXEIJxk8p0qZI+JjU6dMnp6SQKFtI + NmhHufz49PTBAbknZJopAfkMzgaFFk/ukfhTwvjJPfJYSdmQw0ie3afPyIiTz3DvhDxJsnWUz7l/ + SjqJdCbNKSbrycMn+/skqsf7T0kcju99+uAJ6ZzTp6SqyUsiDcsB5j6lxQ6e7lGejRj46TMa7D0S + ebJ0lEA7uL9DPjgHK0Qkcu1I9ggIuS07J6cP7pP7RURHYHp8ckw6iZtR8ER+NHnKNLrd3R1yIp+S + 3/Bw93jvZIdIRy48cCPTSt4QuUmf7j+4/+k9kpSHD8gdpJTl/jNylSk3xrhROok0zUNCjowDhdp7 + pALvfUrp2mfkR5yQqRSxJ0yf7JN9OaHsGemGh2QFT+4/IJZ5QNx0nwTpITQXEfHhCQhG43zwKSUy + nkK4ntCEkKd8nxTX01MWVHLpKQVCJo1CxVPicApVkI0hT/QBze/J/RPWg0TUewcU7VLKkEhKGUno + 2HsUilD4TQadCMyO+f7p3gnN4MM9yrw+Ifv6jHIkBJFyFaQtiakeSPqJxk8G/oAIRs4ZacsHxMw7 + QkPKBt6HYpJmJyRpJINkYigfT07NvXvEyE9OyEE7eEjB1QNRvmTCj5+dENYkI+TYUQZ3n9yvp5Se + 3HtySoHZU5kFSpad7lC8RDHFkycPydN7QjmP++T6kNqi10h4BRoh8fDZPSLpLtw4YlwKOp/QMsbO + PdKDlGXkLArN7RNiF1IszwjaPvnyzx7ukvBSeHWP1lYoxBE5ffb06TNidAqZyW0hZU16nRpTsPnw + GSWjyALtAbf7OyeUWaXFEPJH7+2Sa/mEkHr4hJJSlBmi/Abhg07JmSKhO3hG+OwSIYj2pP9JP1E+ + YJdEE2KIIcC7oDzewT0KFSgl/owYkkhLjZ4en548I++XoijC7T5n9x6SmaZEEgkixRL0C9mbZ7vE + LpSAIA4BNFKXJ/tkWoiXKBdGIRb52U9PCZdnp5S3OCYXhaHtf0p28eSUmhJ7EEnICB3fe7r3jFYh + CEViWPZ/7pPMELHp/+RNkmu285AcBEqWHVCcRaH8/b1PWeHfp7knaE92niJDSF4oEZEUEuUdiGP2 + n5DUckh2//4zMkFEuGcPKYFDjgvx/72d4yfUMbw95K24GSzHPTgClP07/pSE6nif/rhPEQb5fqR6 + iC2JyUmI7n16Qr1QJv8+RasPKedKHgaFhg9IQxNXkDgD2gNK5xCbnjylDB1pKyLa7u4JZYspKn12 + f3/nGZkPTNbBvYekOEgTP3lAEnNMrsYOGXjymfbIbSLCn7K2pACMTBWZgAdkofbIbsDYkBNMVoj6 + IMMoKwSUmnpGTERSSlQnw3T/6X1KAZEUHuySg/6Uwls29vdJzp7d26Ok08kpmfYnO6R0D/YJR+Lb + B8TBpFq02acHlHsiHbLzKWV07u/s37tPiyHEIdB7D08opy/Nnu6QuiXFco+iZsLqhFLm5E3tHVNo + TZR+qtBIVZHxvL/36T0yUPfJzT6lxPw9Ss2SeJHsPxG2PH5yuk85+AdkKoiXKAd/QKt6tJ5GKXRa + rNknNSXNnlEW7Hh3d/fJU8qt7N578uzZfUqwUJhCKXHyTEm/oVOabYoXSfvtksUjNr9HYSWlK8lA + 0EIcabtdVtH3kV0iH4MSKg+JtkQCZOUpSU7RGa0JfEq9PNolPXj/lDLcT0+ePXz6FOYbc7dLTgmZ + 9mc0PbS+9USm4fTpQ3jz5CIS81DE/ZCcPJKBZ/ukOWl6nlJwjzGckn6m/326//Rk9ykZ/nukKU+J + FGRRIH/7D9lfodwWpQop/UGmhXp4Bs9x55SMEHkcu6TLP33GRouMK6lU8mQpXCbH+yExKXnS98i7 + Jr+cLMPuM8483qflo91n+9A2T2nYZFVoBYUs0v4eicEz8sVIXXKnx/s0fc/IppJGpOjlHkUkxHfk + yj8l47FDPaAZoUSm6IT8TiIrNSZn4ym5KjsUhxPFD46JC9ApydI+5VxJB+48fUqDe0h+y/4z8pRP + 6BUydWReGBpZ+FNKRh1Tvp3yx5T42ru395QWGk5On5LGffCE/BU0I1yJWORlULKF3LMnlFi5R5kx + 0viUNqf/PZVOyZMl15ry/Z8SZQmrA0KWfJ6nWNLY3fmUpgWuw6f3j2k+7h3sP0GuhFyqT8lL2EFg + SYqVxv1wnxfJP71/uv/gmMK3Y1puI6k/IRzJbadYlCLDJ8Q/99k8UzPyCEjh71K8T7mTp6cPKDi9 + R6id7O2Tob5HDIdmn+6QCjx9dvzsU0qyPqGQ9+R4f49WuCm3QDmLT3c+5an/lGJSUlsUQJIVIWAk + fQfk5SF0Jom9T44Rm0Bqdkqm+VOytoQvGeS9Hco7P/uUrBPp4d1j0nfcKWVcqS8iCKVHiB9J+9Hg + yIOiFAql6o/JaeJmZAJ2KNCkySaJP6U5IZmmiAooH5CjTtLIzSgfTIm0ByQD9PPe/X3KjpFiI7+E + Urz7NBgygdyMLD8lKx6QAqJQiLI35IGQwaUcPlTLwR7MDEVkNCWfPqPgiNTIM6SCSAFSTo3CC+Jb + MsHEDSewgZ/SYMhDRIhIKUEKc08owKL8CDmOOzv3yDySqQTh6J2Hzyim3n9KQdLOM1q/JBVF/j1x + PPVAzq3Ql6Dv3rv3KYQAcczx3i6t+1ISmzIATx4ck8rjFNanhMj+3imlm0nMiYsoaiRt9Ix8zRNy + zZ7eh3rAUGlMpKsoIiE8aEENrhuli46JoU4+Jb1DyQMeAn3xhBIsNDgKnk/JaSGpPabwh1bCKEa4 + //TZM+ZLSkM8vHdKIfP+AwrhPqXInziI0hhkL2iSPyUfkTsl/5Ws8f17RP8n+0/IFFB+iLJTlPeg + VQB6h1xaslrki1PubY++oYBm/x6lCg7u09STKaJpoIzMDqWbQRDy1x7uk69IXENZzOM9sgUP9gnc + DnENTR8FiUwQysjfI9NC+bxPwTak+ih/QvNLIRzlnyjQZT1I2p1yEyeUPKboieze3lOSdZLe3aeU + jKJg/0C4nDQW5T2ePCUOeEDcQTAoRUmyvUtCcUIa5/Q+zykBIF+GItwTUuB7xJGUEzylhXxKfd17 + QjqRkAJBHuyQp0dtnlIilf4hLUlp+GPKGhEXkyWgjx6AIBRzPiUIZCbvE6VJ9sl1ofU6MjOkzWll + gdQNJusBRUyU5qOxnnLqnDyje/QJWUOal31aD6BUODqlteMT6o86eUaD+3SPwmuaV9J4FBTQwsQ+ + xcWU4H5Azg6ZvQNSZDuURtgn4Tk5OaEhkadHOZ59Sp9h6h+QTdl7SKr9mBxHIu8zIhs5aJT+pcVT + mgqaIyYI+a4UW5FdJsVGRpfyAHuEN6VXn+yRi3WfjCKPlHJX9w/2SVdRS3JEKXwiLUM6nLxf0jcH + 5GDzECiThPkii4l8Iqk4+uP+Hqlm0p3HD55SxgRT/4CUwjEZEfLtSVaP9ynGJGkkx2SXgkpCjYJm + zqpTO2J5cqN2SVGQ0qU49VMKzsmc0mukt+/fY+eBmPRg71PKDt4n15yWoGh+aWni+OQe5e7J+SYT + +YQpQok0MnQPSTvSEulTcmlomkjePiU7QL+jM8QplFWC/aNwghzTPVp8erqzR5x3+vTp8acnzyiq + o/Vv4EaWjehFfEOZgwPyP2jd5JTyJ+R9kbKjQOUpGzdy9GhS6KP7DynOojQcqfmDk539E/JbKGWw + Q1hzM3LP98j/2KUBntwnW05G4R4cFmK+fYq2d3bYMlDI/vTJp6dPKFp5uEMW5xkZTBLePUplkAJ9 + QskddlYfnBxQboAWq/aJAJ9StPyQnDbiOyLdDnmrlKPhHP2DE3Jlj4kLPyWPkhiP4jiaOSIi9UDu + KAV7IlonWNGiYdDHpHIpnUAJDFrlodfJDFM6RtY2HjylXM5TCsMo5jjdeUrLPHvHZADIvSdS3qfk + PpZK0OxT8tMPSFNSsPH0hBQ+OTmgA7m+xw/2KOzjoPIBrVDsPSDglBF9Rl9SCEYOIi12P6RMA6nl + JyesHUh73CdiwHIeUCi+S6qD1pvu7ZEiILI8IH+Eh3Cwc0JriKSuiCQkAeR379FyIMkguWX3nj49 + 3r/HkcXB7gNiQFqOe/DshGJB0pgPnhCJyF6SMXtKCoVUEpH3gIKjHawI30N4f0wQiUv294+f0Jwd + P733hBa2wSEHeySBu09pse5g9x5FXQRg7wFljE6Pn1JWhAizz9HiAQVgZCwfEmdTDobW20/IzafV + nH1ybklDPSMJZdz2Til6INVN/VFQcUL9Hz/b3b/39AlFNyfPKKdCfg2Qu0fBIzk2FAbtkzvHuWaK + Q4+J0e+dPDmlzB+zyAHFNuSVkctCzjtcQ2Jd+vUh+RgUPVNCirwpjIFmjmRwn7JcpJTu7e+SM7RD + K0uUjSAS7VC6lUNZWgqhHCqp9vsn5Lgd39sn55isKHlMtLpBbEw2jw30AaFLCv7kyTGZrn0KmB/e + e0rOC2mZfbLupGxP2R4d3DvdJXeNtAqpVHJ2iQ9Ii90/vn+f4pmDUxIW5jjKDj2jrPynp2SjMUry + vmkhhNYkSF/S4gjx8x6P4T6p0Xs7JMeUdH5KaZqnpMSfkLGgla9TsjQ7n8qsfrpHLsfpk2fPaPGN + 3ADigh1yCCg9fu/0lJQkjY2bPXhwj2IhSusQNrQKSUkJmvOnnxJoync8O9mjRRBudnz/yTElMx5S + HECSQLP36Sk5FKSTKTVKFoO0CIbw8B4leknPPNyjvAJsGOl9It8pCTCZYbLyx1BdhDiWGsnnISOz + S3aVDBKFJDuUdaCp+3SPEio80ifHJL407eSgUXT0lMJoYoQ9eoMs+vGDT8mbl2kg7vmUDOBTWtQi + PtylVCbR7gEp9WPir2fHFCXzGEhBPXlAwQQZWeJJMtHERNQvraSSd7hLCoGDsoMTSt0gUvyUDC0t + jT4h7jmgRDk5efdIzEjKTmG3Dp6SlH5KtvThMSkOUtM7x8efkgaGS0zqlrpgB5O0/A6pP1IbREFK + ItyjsZxQTv0UYRQtHz18wrn8A9KDJFM0S0/JK4Q/85CU+P5TSm4ePyXppyVfbkaaiKbpKbEwWaMT + 4pX7eyf7+xTmUUaAhIm8tkekcdCQQn7EIGRpyS8m8p3cp+zoPcp1kV2i9QTJPZDnTOs8B8ixkVtG + NCVndPfeCRmbUyIWGeT7HGpD6B7u0UhpFf6EUiNkk8AI5HTcJ5UAz5p9wgPydUmrkL2Fi7R7//ge + JXtJjCiTQSqXJufpU+hCZCxIaxyQW0mJtYNntLL4YJ/iePJ/SBmeUPZLGJgSOAcU8hE4Wtog1/yU + 5JPsIanknftP9/ZpPQlDQFTxdJdUB/EbsSeR+j45cRRtHu8gob9Hv0qzXVr2Js1879kpKRrKP35K + IRBZXHrrhFaGyCCgUxoluQj3yQkipXBMtKAUOGXSyPg+pZhlF1qNoVGW8mTvCb4mvUypGHiENBBK + ZZH3dZ9Uk3RKri9ZrD2SdgpUTo4p/08q45SYk1x08gE+pbVUohs1Jw+T3GnSR0+IqShVQ7aLfLP9 + HUpakLRRKpGhnZL9oYQsJagodfqMIvM9yhId7D+hnC3pfwoSuRmtNJCgnhLtKZ34jJoRo1G8SDkZ + skFwpYlu3I6iqpPdXUKPQnXy5EnxkHdOVhuRzhMKvlikH1KalywuZYkpZjx9QHxOCJw+JJeO0HlI + iwa7+3AzHpKQk6SSdqdlbHIeH5zu0or0M3Lm7z2l8ZIof8pDJb+BqP/0mFIK90iVkFtJgkipRzKo + lPgmtcai+pAUHq0qfUpLpeSrwLN+SLr//pMDciv2yQsnLcO4USxHce7OvX2iBHEteaq0SkQoUvS7 + 94zsJXUKaBQT7pPY3Sd7T0rthHyaHVLr5JfQ/46JWWlllvwHynTtkYqidRJkeYk5dihuJXamaO/e + p8QtJDvc6QFpP/LDSPPRivi93SeUI9k53Xv25BkZKtKbFJXySCkOv/eQFo4OKPCCKiZFTvxBpKMU + +c7xE3KiBbeTB2QTaFmPAlVKvSNfRouT+8QbBPOYRJYF/yFpFgp8aZ2R9BkFj5R9JA7Y2XtGTfYf + EvvLyhaps1NyWimX8WRnj/JK5NHRKvA9YlLyZClYJQmQZvcekLU/OKb8Milm0pnE0DTonX0iCiWb + 793jsOHhwwf3SMuR4UeegDwVWnkkf/oBxebki5Jz9oQVJukDUmbwHsnxvU+BwS7FcQ9O7pN87D+j + +Iuy7dzsCbm9T2kN+YSyJpSjI0tFsROZDmK2Y9I+JAJMN1ps2d15tnfyjIwbWXEy088oaUIGlrQT + cRn5Cowb5ZZ2yH0nopwQl9AqDDXZv0d+A+XO9/bIZ+YM0MMn5MwTOzw4JiGk9M8u6ZITctHIVFNq + nFS7BG80smccyj/ZIaiUE94hNHbJv7hHPtQzUmv3RJ7J7XpI9IVeIB68t/uUNDa5O/f2KXlBSxNE + Ke6UOI1CvGc7n97bJXm+T5nznWd75GgSJ1HeggbOriNFR5Rae7hDrvPu0ycUztCswzmmGHqfuO+U + TB43e0pwycSQUN1/dgzZo2UcWoV99ow0Kgn08f6n8LsoOfSMQnBaJaMRH39KuWFaDKZF6IdkVYl4 + lNxj7+EhLW6QzD4g+0zqnvIAu5QMIKVFIRTp8mcUlMtkkWYnX4/WjUnt7d8/pviIYqK9fYp6SJM9 + JdeZvbiHlCKgyTp9Bmf54OEDcspIhkjNkKwQw5EjpM2ISUnuPj0htUKx+A5lNImw9yj5Q+K7u0dS + w7g926GVMhID0jmE2T0Kevf26DVCl3AkhU8aCeR9tnv/5Aml0/Yo8CGqPeF05j0KLInPSe18SuuG + cB0prtsjL4R86Xt7x58S0+2R7t+5f0I5D1oiojTsniD3jFx9rLFSrojCE1pCoACB5ojiQZp+QpW0 + A+hLqwSnhPIz+oLSQZR3pBULUpS7u/eh6+4jQKJOCVnEGvs0fJoBRKMnpP1J1EiHPKNMPHkq6JTi + oYc0MQdY1SVnmjz3A1pZ3dvdPT6lMT8j3UdKGs0OTj7dp/jjgML6A5rOUzK8x8SshCS5XaR+duCL + kMPxlFZpH9CyKKnB3QcUPj+j6IhItEu+4i7FACyox6Tsjymip7zH8VMa2qfkbRL6T49JpslK3b8P + fwrNDkhgKFIhkSBaUh7jGXlTBwSYnO1P75N63AdBjnePn31KqorSXzun9A5ZpocksjRflCc4JTtA + DiZNKjnQD08pj0/Wgq3hU/ofSQotad8jchMlSePDHB3T7HxKS65Pn5JTQkkEErOHFBbQKiJxDXmY + NBwB94QCQIrfKYtEhnGPbNPOE9Lo98iLpzz00/vUDNNAKwH3KUdNYRg5jaTkH957drxD2oTeJQeQ + Ei4c4FOCcY909N49GsgJEiK0fEc50GckWCRfpFREwx2T/NNqHCmYT8nvIq4gfiPL/HTnKXlYZDXI + 9Egz8o3gXYEFPyV/9t7Bg3u7lJ84/ZTWXClNisV2bvfwU9L5tAy0+/ApRWPPjnfJD6LVXPLiKPom + J4MF//j+LvmEFPOdPKV45ZRoSmxE6xukonZoXfaAyP5oj7xpcp8w0genxAYHkFNa6Nx/sveMvCEa + 2LOnz2g5isE93Dmh3Bqlxki7EvscPyWX8IR0F616UA7hAQWNmNYHlInc2f+UPKKnpHjvUdzx6VOy + UrtkpU9PCLUTCsyoGTlUz4jJyS5RJpdIT/lk4qid++RIkG17Rq4LE5gMEnlve3sntLBAy2kHFD6R + tQHPP/mULDRl76QZpVtpnk5ICZGxv0fhzpN7p8dki0Bx0u8P2LzRoMkfIjI/eULW9IQYgNKSJJZk + zyBCDx88Vdzok6eULHv6jOKe3QcUxZNoE9eT0FHMSf/QPFAzsqYgyQFxKDlnxFa00kzW7uQpBRr3 + KWFN65rgOFLaJxgPJdpIjRPpeF7IJz6lqPoeRdgc4VM6hPyFU1IGlOF58nSfJvMJrZiSEn9ANuoJ + 5WRY21CzXVpnYul/9ozc7PuUL4XI7z399CHNIy07sERTJHSPbAJl/khnUVLthKZ8h4JyCuV3ybKc + PmMreEwZomf7+xRGfkpqmjTR/u7+Kf1GHitlT4j4os1JTp7tkx/4Ka1qkb6hOJaSmOSSkNWneX6w + R5SWZvtYOyUnhkw26S0yJA/3SYKOKcp7Qp4bpZcQvR2fkLUjTQMyE6ftUzr+HvmbpPMeUKbt5Ol9 + 0qugG1nvneP7ZBDIrXuIqXx2SlHxCfliJBIP9yheY7pRJoWiJVrTQs9k6GiyyfZS+EKZlfuklsnj + xkhpBYz8NXJ9d4hXSYM/Oya9uL9DRuzZ/V0SbjIhGAKFWITfPuWjKbi69+AJmVyiNSVGH1Ie95iU + GrvSlA44IPVAXiIxI/l9xG775OpR0EVh9z3idTIhNAQsvXz6dO/pkyenD07unx5TxEAC9Cn5IcSa + 95/Smh9raUp2USp8Z4dyZs8oTf/w+Jg8kx2yg58SynvHtLrLFoS8YEr7kERRWElU2yX78Yy+fHj6 + 6VMKk8ksn+xwp5TXIT1AThGxEuVF75M7TZqRjBQt3lOkT8TkTu/v7t9/SssZ5KqQK3NAVo7cD7JX + pDEf0gjIZIJu1IzMJfHB7v4TEnTS6E/JRaPpPf2UnOj9PVKG0oysH0nugyefkh64R14BNSLHnNQo + rW48pXiTE/BPKGNBMRQl3Mk2kBtLNoG8x52nNA9kbYj5ZJmJmp3sPcHKOWVY98i6kotLTjjm6h6t + thO73+Nmn1KanXI75LBTbLZLAfQTWpEiZUfMRGb9lNQLj/TTB/ef0jrOHvynpw8Jlftk6khl0/rq + yR7ZuRPOYD6hvPQD4uZ7e6Tx7h08e/Lk/g4NhVzd/QPyT4mzSV1SM2K3Y3J+np6SkiHs790jX5Ec + 04Pd+yf7EPHjezxZxEH3KOdxf+fklOQdcTalcgkmRd0UHD579inbSgpkadS7lKI5IOtJxCaxphwe + heykUHbuk7zy+gbphgcU8jzdfXr66R4tTD2k3CClC07JttN07JJ14XX0J8efIja+f/qUCHuPuqf4 + iFzUh+SUsVkhncTQaM2QlPqze6SRj3fJPD8jN5/49+lTWu96cvxkn9xQNCN1C8+aVrrp/zRdtHpB + wnp/l8Llk2efPnmqs0ASc3pA4fgDUt7PyMDvHBChj8k5I/+JaEohBzcjelHETgJ9TOlfWg05poTJ + E9jvT8kvojcOeI2fPAdS37ToQyqe+IKmmMi6TxJDWUTKkd8n+8B0o6B+/5jiVqIqeQjkcB08gaUi + tjm5T6rwGS2D0JxSTH96j8T8/r3dY7JDxySxD093nn56QpkAsgz3KA0CaCdk88j9J7LRCjXEmnJ0 + oB/5ZSRxDylQZjlF3oVMM6XXiINJgd37lAzEAbHbA1qSvE9rcGRQ0Yw49ukJpQmItygGIO366aeU + GKXEDxmpgwPS1ZwPpWb34e2c7hDPHZxSBoWMISXs9j6lIJJUIjkoDI1yVaQyPqUczn0SXrLMZIE+ + /ZSU1lPYuJODB9LpPYqp7lO0tLdHDis5lw8ekHJ68Gz3AWVkSa6enLAmP6Gs0KcPiOD3KY9M0S7W + OQgvsug7pAIP4GvCfBDJaaGM5miH/J8n5FI8Jc3+KfleZPQfnlKoThaQ+I1ylPufnt4jO7z7jJiV + hIdE+t7Os31KLhOn3if9zs0ofUsa8tMdwp0E+cEDWuUnH+GAFC255WR8MFIg9/AeeZckk8Q8pOl3 + 954+JW+J1oQpZXxAGUqabrAIpRl3nxIrUNqIenuAeJDCuN09ykdTSEQwZTEVUQ6R5x5pLCIoIfiU + 0pe79/YpXqAYZIdyUJyZJDtFWXAKN8gXuH+f5J2yA5QTIeR27xHpyJdmBUfJU9LIzyiIIQVHfg3l + X5/tEpnIV35CfsIp2RemL00KBR73KEFGiT9yj8lmkRySNaEojTiPGAjZDmpG9pmIu0t5rOODJ2S6 + KAiiMZ4+u39M/ELrxwLt4AkF8vukPD79lJIjtAhI4dvT46f3Scc/3XtGq0nSjJJ0eyTxT8klpswo + ma1nlBvdoeQOhfL7cFB4CM+I8x6Qu0H6kAKHe7snlLYn4pBiJZKS1JLDvQdwpJwou71HigDZShLa + T58QwuRFkdicntyjiBTgSAB2P4Vmu0eiSR3ShJMV/vTT3Xu0fnv6YO9k7xm0CC127T2gpcSHT+5R + Pur4009Jd5KuJHYjBUQ0JfcGY3hKuZeDe7s7xOYko/dIICmPd49C+4f3KQNACVRaiSRWotW8B6cn + J5TJIWtF7L9LHhUZ6BNyq8g3oUhuh7UvDYpicYqYaQ2K1gtBZopGKR9LVueU3HIyF8jY0JDI7uzR + gsHTT3fJJJGfRI4gmRlicEoPkE5np+DpPXLrTmm2Hzw4odwyKe99cqZI3O6R3JKGIbcExu3p/vGn + e2R7d55QzxQWkLInZUec8uBTCgCIv8hBBjQKRHeIucgLo3Wve0Rt8sH2KPNK2b1dcmCIm3kIpOn2 + Tu9RwoIE5ckuRXSkVkgl79CEkBzeJ0vGs0AuCYUAZGc+Jeo+Jd+GnFBKH5NbcHK6Q6qUskmARu4x + cSwFgOT3k7NPdDqgqXtCKRVKZ1LURBpOm5GFvnePKE/LDzv3n9CCBzUlq0De1AEtUrEipGZ79ykH + +YAclj2SajJbFJzukCdKhuD0GaVl2Y9+Smqd3J5PKRdM4nVCQkK5LBrfKY3gAQk4RXXc7GBnF9lP + TCVZ4/tkxO5Rfw8oc0fuIYVUFEQBtwNa56VMDQWyRBfKfRw8Ob3/7AkldU9onBT+UkoaBCHH4+mD + E4pSyS6f0tIU5avJiydd/oRCGoqwHrB2ePqQlt1omZusFRk2WjymxMIzMvEQUkpSUOaAw8WnDyn3 + dvqQLC1pfFIOD3cgCwd7+5R/IOEkYBxYIGlHvgvlJok7aSWVTNJDAn3vHvHGp6SnKODjTo9Jv9Fy + G+nTJyf3nxLyJPlPP927/+RTClCJD4lDuBmlDslSUExKs/yAVkgJAervHvUObUfmWDq9/+QB2HH/ + KS1UU9KDWOgJOYKfknRQDohk/Cl0DQ3ngDJXJPq0GkweGnEvzRMZE5onGij59jKntMb5jHQ2+c0P + dshowURTmoj8lON7FHkdkyZj3Ci6Pb53Sq8RTY/Jb6Z+TpGzI5/iU1rwp6VAbgbN/eAh+ds0V+T4 + 36elEgRmzyh0PTi9//TT41OeU4pNiLp7pFJJNz+jzCVR8N4pJdD2nu0iPj7mfCOpkxOSIHDgPtGc + uIk8QFo32afwdP8ZvfKEcydPn+2dfgrzSHQg1ElvEFeQliGxoAwx6VsJZMn7JB48II/2mHjpwcMD + cuop0UJKkSaOiHfyKbMl8TM51U8pY0c+zd6z+08oR0Ce2vHTp/TP/X2aGVKXaPaMPn1GfhtR4hl5 + Ag8pG0KkeAjde5+kX7wk0hPE4yQy5FvcoyD0ISkBakHcskdeAvydhyAIRfTE0Dukrx7uUFxEfhep + Q9JXu8/uk8B8ukP+KtiS5vHp3qdP9ymZsUcW+ek9EgVaGL/37Amlf/eQ9GHv8nTvHrnBRP09croe + kLomkp4+JZ+SLN5DsrFkHxk3ykc/JYVCyS+yNbxiSBn7fRglCtyf7JDHybjBjSJI94g1KOwjq0dM + Tl7afXJF6BuK5TjrSwaBfNUnJ7TCS/xF4sXcB5NAYE9J8ikKBG7k5J6efkqJefJj93eJ9Z/R4uYJ + qXpSSGTf9h+wAJ7eP6VYmL7dI1mn+aUwBxBJw1H2gdxy4gbulOwNZf2Imyj2J1eBSEURI9kYWiQk + v4RMPsdGJEWUcXpIy84UQVKYt0MrRrCvn1IUuUMW+D5lVgGN5JUcgT3yBED7e4iZ9kgzk5bdo0T4 + KaHAQyD2IDE/3SNGo4Ca8l1EC5Ii8o0pm0mDo7VlNCNtQJ8SWakl5a0Qiu+S2SH1R7H0kyeklx7t + km07pTn6lHQ7hbIE5lPKDT549pQYmbxuQpUiDFmYPSXH+eGnJDa792lh48ku6QOyurTASNOzd/yM + ZJPAUTOaN0KNBkUKgJyM+2TDCPlP71EAQgxAOQXWXASL3K175Ajv75DyO7m3RyK7A56mEP0BZSoP + HjLhSF+SxTggZ+LJHtkNyiiSCadMwD5lmZ6SM/aMtSo12ycVTuxHipO03f0DMpOUFNkhv+spLRQc + EMMxNEonPCXH6NN7FKqDgWGjaU2AfGgi0QPiIGY4kkfK4O2QgTqmSIisFmVFTmiqyPSTo/zw/i7H + AsgckFkj3Uih+w6NgdLupDwosKXUIgyQ+INkOCiJTWvhn376jNw2SqpTvE4yf0IUeUqzS+SGh0G+ + 8UNyAEixEkfu794/JYEn5Uk5GVrAJi6mWENwe/gpha6kjU92aZ5pLkmtPN1/9pScL2J9cok4XUNu + PTEhGVk42SSg5F48obGQ5Tig9P8eKV1hkWc7p+QJk6tN/hmBIvYlVju4t0t+KOXIaJGTwkAQ7hm1 + uk8UpfzRKZGXnFeK5IDtDnkUpOdP93gMNDOfEiPtUNf7z6jR/rNd8tzIWN8n2aIEOsWo3OunFFJR + Lvd4n+b6+FMyHRSzk5dMHhA5kZ+eUKoOhHv25OSEIuoD8siO944punpA2ah98iLv7T15QKqUYgbu + lKL6+9TpvfsUQxEjP6G1gk8pZ7LzgJQqLds8ZLVKWZRPn5HSOKFMCfmSBOB0lzAkpUg5zAMak6y5 + 0UBpgon2tI5AYyFVvE/hPeW9Dkhr7u/cp3SyNKOECBkbyms8I8O6D4V6QjxFwdM+LXEc7JMNJEfv + GSWNyP+iDBjhTkD2yLU92dtnbwsphH1aJQO0vYfkQNMwaUGWnGNagCTUyFA8oNzTg517FPqwaD0j + ISEopzvPKN9IaoTwInbcIZYmHbJ3TG4O+6o0CSTqz+6RDSC+ptiEXLVdcr/IEu8f0/jJrgg0Aktr + iAdkl4knKOSluSe5IJ7YeUh/k2ph3PZJdT0jyXv6hMh5cu/Te6cU7lM24/Q+uS73KVvE/iC5UU8p + Gb1P7ET8vffp02ckDDvkEdJ6NKW1yI3nhOkzYl4KSomkpEeIbsSclF56QHJIU0r8TzPEuBFjEXOR + d3pMwrmPjN7uwaf3Pt2laJ7Mwf5Tcqa42b2n5GiefErRC/k0uxQ7PAB9npySxjklHSs+/jNaBCBR + oE/p3b29J5SsIb+cTPn9J/eentDgH7LYE0eS60bqnhzaXVqP3KHUKWXsjonzyViQVNBIAe1g5+nJ + 6T0yKp+Sr0Au5f0TMn5EvV1KQO7QtN67z7NALiQttD27RzHNDuXEyCZTMo/E+j7YhlYwaNkQnZJj + uX9MhoK8OtIYFFJQ5pI08T65tGQx798jJQ26HVNHO59Slh1f7D+jhWlaTn9C5HhGA7pPETdb1GfH + pCr29wkbSoRRnHKPbCml70kD0y+kQcmJ5yE8IYaEOJN2IBeUVhU/3SGdfwzvjcw1uQyso2m9lghL + TElgKc9C6X/C6RkFhBTMk2GhKFAmi+weccQxWR9SBaQeyPB9ukfEeXCPpmCPkuusa55Rcu8+rScR + 8vvHlN8h2/1s58HT3Qe7pJyIX0l4uRnM7gnJNi3w3ic1SchRco+sMuWAKBp/QFLJIyXDSTy48ynF + x/vHNBtPdk8+Ja1J3grR6h6lkElzoRml7imPePrp0/ukTT6Fe0EBMqG7R44jqYGHnPgj8SGGO35A + gki0g40hbUhuNxk3Ml8k1KTf0OwZqetP79+nCOcAFpLULyWliB12iblIJJ/usqUkT/f+A8rA0nrw + LtkoSuHef0AkIsVP2uIZuRzk12Ckz8jG0pQffEoLQJT1IB/iHlknarS3Q5xNK5bCIc9OKPIjJUUi + Q5r04adkmognaeYJ4C4tcVL25/7/AxfkfN8fTgAA + headers: + Access-Control-Allow-Origin: + - '*' + Arr-Disable-Session-Affinity: + - 'True' + CF-Cache-Status: + - HIT + CF-Ray: + - 4d12d13d4d0069db-LHR + Cache-Control: + - public, max-age=2678400 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - text/plain + Date: + - Fri, 03 May 2019 14:10:15 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - Mon, 03 Jun 2019 14:10:15 GMT + Last-Modified: + - Wed, 16 Jan 2019 07:29:47 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Powered-By: + - ASP.NET + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_validator_hit_no_user_not_recorded.yaml b/tests/cassettes/test_validator_hit_no_user_not_recorded.yaml new file mode 100644 index 0000000..582cca7 --- /dev/null +++ b/tests/cassettes/test_validator_hit_no_user_not_recorded.yaml @@ -0,0 +1,323 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - __cfduid=d310f3995592b10f8eebc24787a44879f1556892615 + User-Agent: + - github.com/craigloftus/django-pwned-validator + method: GET + uri: https://api.pwnedpasswords.com/range/5BAA6 + response: + body: + string: !!binary | + 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 + headers: + Access-Control-Allow-Origin: + - '*' + Arr-Disable-Session-Affinity: + - 'True' + CF-Cache-Status: + - HIT + CF-Ray: + - 4d12d49f997469e1-LHR + Cache-Control: + - public, max-age=2678400 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - text/plain + Date: + - Fri, 03 May 2019 14:12:33 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - Mon, 03 Jun 2019 14:12:33 GMT + Last-Modified: + - Wed, 16 Jan 2019 07:29:47 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Powered-By: + - ASP.NET + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_validator_hit_recorded_no_user.yaml b/tests/cassettes/test_validator_hit_recorded_no_user.yaml new file mode 100644 index 0000000..e23d5ca --- /dev/null +++ b/tests/cassettes/test_validator_hit_recorded_no_user.yaml @@ -0,0 +1,323 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - __cfduid=d310f3995592b10f8eebc24787a44879f1556892615 + User-Agent: + - github.com/craigloftus/django-pwned-validator + method: GET + uri: https://api.pwnedpasswords.com/range/5BAA6 + response: + body: + string: !!binary | + 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 + headers: + Access-Control-Allow-Origin: + - '*' + Arr-Disable-Session-Affinity: + - 'True' + CF-Cache-Status: + - HIT + CF-Ray: + - 4d12d13e4f68bb88-LHR + Cache-Control: + - public, max-age=2678400 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - text/plain + Date: + - Fri, 03 May 2019 14:10:15 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - Mon, 03 Jun 2019 14:10:15 GMT + Last-Modified: + - Wed, 16 Jan 2019 07:29:47 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Powered-By: + - ASP.NET + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_validator_hit_recorded_with_user.yaml b/tests/cassettes/test_validator_hit_recorded_with_user.yaml new file mode 100644 index 0000000..27ffa12 --- /dev/null +++ b/tests/cassettes/test_validator_hit_recorded_with_user.yaml @@ -0,0 +1,323 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - __cfduid=d310f3995592b10f8eebc24787a44879f1556892615 + User-Agent: + - github.com/craigloftus/django-pwned-validator + method: GET + uri: https://api.pwnedpasswords.com/range/5BAA6 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/InZ27j39 + 9OD0yf37O58enNy7d3xyuvNwb//B6en+yaf3Ht7b+fTJo3u/cbKzu3ey+3Dvyd6z3U+fHeydHu+c + Pnl4+mz34OnDp/fvPXyy8/Tpo100u3dv5+TTg4en959+uv/s0093nn76cP/B8cN7x08/vbd/+uzg + mTR7ePBg/+DZvXu795/t7zzZPd7d2XtC0E4J8O7D/ZOnD6XZs4c79+49uXeyQ0DvP33y7OmnT3ef + nuw/3dt7uHvw7P7pw0d71Gx/b//pk4cHJw+Odw72P326d/LpyYP7p58+fEAjOd45Obl3+ug+mu0f + Hzw7vXdwsHt6+mzn6ZOT49O9/f0nz/Y+3T15+mD/6dMHAu3BMwJ/jFZ7D/Yf7N2/9+zhwcMHT4/v + HTzc/5Re2WXc9o/vPTj+9MGnp/eINCcPgNS9T08e3nv25OlD6vb43ol0eny6s3//ye69/SeE+L2d + /XtP9nY/PT4l2uzu7Jye7uxwp/d3iKYPD06fPiBS7Ow8fXhv78nuzrMHD3YePL334NmzJ/sMjUj9 + 7ODTZ/d3Hx4fU6c793aePNg7OHm6/+Bg597p/Sd7e9Js/3jnydP79073npwc3Ds+eHD67OkJoXe6 + 93Rnnwi1c8Bzev/4+ODe/acnD/f37t3boxGenuyePHl67+DZ8cOHTw4O7u3zSO+f7uwe7D09JXLR + +3vPPj19eu/+3sEOEfDk3oOd3QcPH+1TswcHz57de0ITRYTc/ZTI+PDBp08fPH1w/9OHn3764JSI + zNAePLz/6VOi58nDPZq4T3c/fXjvdPfk4OEO9bq79/Tezqk0O36wt3f/yYMHDzBDDx5++uzpvWdE + nIcnuw+Ie57cV2hP9sBiD4j4+7tPTp/cI7Y8efJs5/j+/RPC+f6zJ0xeYud7JwcnB5/eOzl+en/n + 5Jiwu39MdH3w8JReeXLy8NGnaPbs+Omzh5/uPDveox6Icx8Sszy8v/fgAc3dyf1nNFno9ODB7jER + 7ODBCSF378GTB8efPjt9cHr/wcnxw0+Pd/cfSjNCde/BKVGZXry3d7rzbO+UKH3yKZHl6f6z+0Ql + xu3JHs3DvZNnu/eJDfef7pweE6scEC327x2TYO0cP5VmT/YOPn26TxTZI/k6ePjwgMZ9+uB0f/8+ + jWlvZ1fodkJzTzPx6ekDEpTj3ae790+fPfj04NP90/ufEjV2nwluJ/eJGk/vPzx+QGTZvf/k5Nne + w9OTPZrAk4c0sbvPPuVOT54cnz453vmUJp2UwbN7+PWEOOkhfXp/7z7JBEN7tvuQPjq5f/x0/+D4 + /sHBg4cnJCk7NC+fQkppLqUZieje8cM9ArSz/5Qo+OzhvXvHD/aJ+x58Sprg9D6zJSmJByenJw+f + Pdm5t0sEpf+R0rlH8vBkZw+IfvroAM2eEks8ePJk//TJwf6z4+MnT4gvSL5I8k93n+0dHDC03V0a + /CkppL1nJJz3Ccunnz4j1jrY2XnycOfZzsN7TyAyu7sPduhDmiTipANinwenx5+C1nukBB48e3Lw + dB8E2d09efjw4c7p7s4BM8vBw/u79w+enhKdHu7g3d0d6ZTotfeUJOMB9UjvHhP/3ds5uH+6t3uy + f/8BEZ2h7T0ljJ9SN6Td7hGSJ3sPjolbHlDvuweffvrk2T2Gdm/n0yf792k+Dw52TmjGTz59+OTT + /YNTUhcn+wekvFkNkop5drBPGuPg2R4xIsnBHjEIzfiDe7unROt7Mqe79+4T6k+J5053759Qgyd7 + D++RSqEBPSTe2bn3jPXb7r0H+/uf7hJsmgIC9eCYej3ZeXZyTDL4dP/h7umx4HZCQvLg0+MD0i3P + HhI/Ef67x0+Pd45JS9CUUacM7dmzHYJBloBQIxYg+T7e3yUe2qXG+6fHe2w+dvd3Pt2nGTslFtm7 + d58U3KcPSTN/uv/w0/sPSbHv3CfcdrgdKYQTMhO7pOSf7T54cp/k6/7OQ7IKu7AGosp395/s7hMH + Ptvfffbs2cG9T++dPnz44CGZiKf7J6TuiNOl12enOydP7z3d/ZSGc/8h6aH9J1BQD3ZOiNg0MTL3 + 9x88I+Xw7D7Zo4OdU3DHs2PSc09Jozw7OL1H1GNo90mzHDy9R1x7Qpz2kEZ5sP+UfiO9TobuwQlp + rodoRjz27Cn1sn+fNP/J05MHuyf3dsk+ndBL1MvTe9zppzR/nz6lMd4jq0JTsb/74Ol9MPzevZ37 + pAVPiCLU7MGT4wcPnuwfP312enLvPimOg2e7NMh7pwSQ5IQ0gjQ7JRk53SfOJOVK1vH+E9LQJBww + D7snO6RTeFIP7j27j2neefDg+B71TKbr5Mk9koinZDB2T07un0qz/RNiOuK642f4cvchTdcuzRFp + ugcPTkmOhC9J09B0nZJQHpNSPvn0ycOn946fEKs8fHpAXLz3qfDlwyfHu8/uHRDJdw8IDJnUJ4Tg + LvV58unxvf0HxOXo9CGZTOHLA+J24mwy1KQO7z249+kJOSenJzJZBJ9aPiGmJn35KU3V02f798gW + HtMkPt072SOfAAQ5IRnc//RkZ2+fFNB9kuqHT3d3yDjvPX16SsxCosjQTp482Ll///4ucTcR7wlN + B/UNvfNwZ58cDYIszUjFkGkndiT9/eRTIhX5VSTFx/TfAzLxqpKe7j093t8hiSeP6MGnzz69T14E + +TXH9MK9/SekJI4Z2tMHeyc0BYTW/u6nND9kNknRPyS1cP+ExIuUlQgDtSdhIv54sLdPCuL05AHR + 4YSk+QkpRxLuB3s81NN7nx48oFl68uzk9N79Z6RDHuzvHJD62t0h+0tUF/YljifdcY/UBTmE4JIn + RNcD8tSePDg9JWF6Sr7Dp/ukLsjmk5p98il5jwekfckZJNk5JQXLDiIBIKfqgKWf5PbhA+Kok92d + Y7IkpKJ2waq7xAY7RGJ0Arrs0aCe0PTvnN6/f/r0eJc80QfEqffJLj28t3t/5/gBz9nezrNnJJ73 + 7+8/eEaMce+EVD2ZBTIucHf2iQpEF2q2R0M7uUfG7d4TcixJ+T4j+KQhdu5/SjYZvMad7pGPd+/+ + p3sPPiWf5z4pC3K6yKV6svNwh3zAh8eiwMg2HDyhgd3ff3JC8rdDs7V//9kesQ1ZPlLtT3f2Bdrp + 04P7e6cP9ojy954dPL1//x6JOFmZk/t79/cJVeaAPbJbZJF2PyUF/GCHBOgeEf346fGTgyf7uyQ2 + nz54Bg7Y2ycv6lOSS9IO5Fd+erxz7+DJA1I5p6S8T3fISWMPYo+cCphS6vzJ6dNPaWgktAfUAzl0 + 5PmRzr7PQ9i/t/eQfLmD4wN4YPvPnu6QFt47/ZRcb3L6Tp+dsDEnl5js8wnR6dnDPfoOHihZiae7 + nz452CVGo8mVZk/I0z3ZPz4hpiTn4t4OccynZAHIwJEDQAJ7DK9w7/4x/JaTg2f75EiTA7ZHIkPj + Jr5+dv/TJ/v7u+zp75E5I3P/ZI/mnRAjPfuQuJwEe5dE4CGx+969RySBpDf3yNQ8Oz65f0Ke1xNS + Uk/Jz3hClm7vhLTAp/d2SOiZJqRBiRr39qADPz09hrI4fkYe4oMdclpIXnd3eSJIxVOMckKE4KCH + 9BYxCTlZNISdZ/vkvxHpuN2nO7v7ZG5IxezdP3hySmQgLf0pqTCSAJqhY+GSBycktfc+fbJzH2L4 + lFTEHrl6NGOf0ngPnuydsC+3R07S7n1S4c/2Dwg3avz04R75zScnz57QyA92SalzM3Iud4+pwTEN + mqIokoBjMhbEJmTljmlWduC17sGC0ER+SobrGcEiBXz67OH9hztP7t9/SgQnaYGHs/fwwacwPsRI + NK33SIvSG6R4SLr3PiWG2HvAJnjv+P6zk09PyOYdkMV69inFXOQok8CQR0URHCmOk0cP0Oxkn9ie + tC5JPumLhyRsBzTD5LoQ25HuIZcP00/+KzlPJ/cIEUJml2wumZ5n5Pec3CN1v3vyhA3OHnH1k3s7 + pNRP9snmEMlILEmvfrpP00esc/rpHo+U/iC9RxJKQePOwcGnu4TPw717+w/JH7i3S5PMVm7vhASe + yL1z+pQiTBKKp/s0tU9pCsmp3yPpOWCzv/eUHBWadRiYA1Jd5E5QJHxCuO6TCb+/T8YCzWiQT0ly + n5LxJREDcz7YJdG59+kxdb17QEqCoZGPdnyAt+8/o+CHwJKuI+UBT/30KSk+Ih7mFHrsHtlMsn6f + kt6jMOTTe+SYknL8dGdnf2ePzL80O35AMRfZwL2dk3tkEJ/eJx2xR/Ed6WniJaIqd0rccQAHmSwT + HEmCeHx8svf0U1K8pBpJ4NgCk9zvkLtAXL1LTjWFD58+2D+BS7vz5AFpIHIWHmAW7tHE7Nwjk0Um + ff/gCUVBDx6S8NJ7T4jvPiXFQJIPcPf2iCLPiGfg7z2hmXtKTguR9v4BwSaJI3VOs3WP6Eau/LO9 + ZySpD+AhANm9PTKw9/fIxyIigS/vkUGldMHOHpninXvPjp8+ePLkhEIYGjv5PQ93iKA81PtkgEhE + nu5S1EEG69P9T4mxyat/Su4xuTXHEpshMCV2ON3Z26WAgFqRhSU7QZH7CdmBA+LmA2m2/+nJPmmM + Jzv05v6zB6cPycM4gI9AnE/6nYaAkd5/8HSH9NB9SjcQ1XZPybYQJ+3cI455Smb32QOF9pAUyDMy + BDsPTp4hyUEqgATp5B65Z6TIjmlSQV+a5AcPSU+SwnhA3EaamahBIv7wwZNdkmKaCYb2KSFDEQ/N + 9ylRgLj94T3iezLaFCk8eXJA/XOzB/Q16V0yVeSQ7jwlVUP6kKINkinySmhi2Ae+94A06v0HxHZk + s093944pB/H0U/JJ98gG0DQfPNmFoN47uP/gHon4LlmJJ/fukZp5QkkIsq9P4bRSFoFmAXN6QAb6 + ycHx3t7OE3IlCfQJjfMpRTkU6j8jP29PhOH44PgpORLkgx4/vU8DIe3x7CHxOXQseTIP98nUUAxH + zhLNCmUWdkj+dp+cUF+f0tw/IS+TzCfxwB4rwntPdp/s3SeVQi41EW5nlywHpUFInRAnE79QYMS9 + PqVA6tmz06dPnzyBdni4S+qDFCwZfIo8dnY+3XvG0/D0KbH8yTPKgjzbIaJTVI5oa4/s2xNyiE6O + iSLwq8ginlKASLzzhBztfXiOZIIpUHy6RxEcWYaHbKTJ6mG2n5AFIcvy5BSx9Kf3yRN7SgHcCanL + U1a/pHaJwKT3SD52Th8+JX+dOODJwT0aPXnYJ/eOOVNBeo0cohOS8R3y7ckrIcN17/79UwrMnh5T + +ouRQzNS2xQ8HtzbfUBeHMWeD0hhP6R3KGFCBCH/SpqdkvF5QpbhgCzX/fsP7pPzS1NPyQIaCDni + z0iiqRkZ5B3ykO/df0JOE3ESRZc75OUQI+zSTFMOgxmTbDUZrn0iJnl/xBz3PyVbTak94i4kNp7u + UfRArLS/e0Ka4AExD+Wf9p+R4/XwCfk2p+iS2n56vMe2kmKyY1KZD4hMe+RQIoIiRUZOy+6DfYoV + iN73wHGk9I6PSexhjB6eHpNVIIO7c0oOGGW5Pn1IsQGNFL3uP6EI//7pvV1CigLA+3s0oeRhEzVJ + sMk87bInv39//ympfIpZT/bIB6XogQIJik4ODigavE92boetIEUDpIh2TvcPKFB8cu/Tp2TiKdan + xMcxWVsKI0kciJX2P72/T4aHOIe44ZTcKlK6u08J7v2nJ2SDyTm4zxT5lAhKfgbZ2/v3yHCQqqDw + kCZw/+npPcp3PtljUSVLROxN/ACaPaBg5WT/3v79PTJZFFodPyEySzOaXwqbiCOJHY4p50LokJ7A + HxQuPTwhceQhkP4kP+X43sm9e/eJvmRoHpL792z/4R645glF69yMbOKTe892d+kf0tLE7ruU2CKb + ekqcTBNI3hZ3+nAfComiAxLpE0oZPCETQjaYvH8m3n1yk7nZg9PdT4m/CPH7lL6lSYNuIy0MFEhj + 02yR90DNnj2jOPeAhvwp6f5nFPoiXKIZvv+M3Of7DzmeIjpSXEIJxk8p0qZI+JjU6dMnp6SQKFtI + NmhHufz49PTBAbknZJopAfkMzgaFFk/ukfhTwvjJPfJYSdmQw0ie3afPyIiTz3DvhDxJsnWUz7l/ + SjqJdCbNKSbrycMn+/skqsf7T0kcju99+uAJ6ZzTp6SqyUsiDcsB5j6lxQ6e7lGejRj46TMa7D0S + ebJ0lEA7uL9DPjgHK0Qkcu1I9ggIuS07J6cP7pP7RURHYHp8ckw6iZtR8ER+NHnKNLrd3R1yIp+S + 3/Bw93jvZIdIRy48cCPTSt4QuUmf7j+4/+k9kpSHD8gdpJTl/jNylSk3xrhROok0zUNCjowDhdp7 + pALvfUrp2mfkR5yQqRSxJ0yf7JN9OaHsGemGh2QFT+4/IJZ5QNx0nwTpITQXEfHhCQhG43zwKSUy + nkK4ntCEkKd8nxTX01MWVHLpKQVCJo1CxVPicApVkI0hT/QBze/J/RPWg0TUewcU7VLKkEhKGUno + 2HsUilD4TQadCMyO+f7p3gnN4MM9yrw+Ifv6jHIkBJFyFaQtiakeSPqJxk8G/oAIRs4ZacsHxMw7 + QkPKBt6HYpJmJyRpJINkYigfT07NvXvEyE9OyEE7eEjB1QNRvmTCj5+dENYkI+TYUQZ3n9yvp5Se + 3HtySoHZU5kFSpad7lC8RDHFkycPydN7QjmP++T6kNqi10h4BRoh8fDZPSLpLtw4YlwKOp/QMsbO + PdKDlGXkLArN7RNiF1IszwjaPvnyzx7ukvBSeHWP1lYoxBE5ffb06TNidAqZyW0hZU16nRpTsPnw + GSWjyALtAbf7OyeUWaXFEPJH7+2Sa/mEkHr4hJJSlBmi/Abhg07JmSKhO3hG+OwSIYj2pP9JP1E+ + YJdEE2KIIcC7oDzewT0KFSgl/owYkkhLjZ4en548I++XoijC7T5n9x6SmaZEEgkixRL0C9mbZ7vE + LpSAIA4BNFKXJ/tkWoiXKBdGIRb52U9PCZdnp5S3OCYXhaHtf0p28eSUmhJ7EEnICB3fe7r3jFYh + CEViWPZ/7pPMELHp/+RNkmu285AcBEqWHVCcRaH8/b1PWeHfp7knaE92niJDSF4oEZEUEuUdiGP2 + n5DUckh2//4zMkFEuGcPKYFDjgvx/72d4yfUMbw95K24GSzHPTgClP07/pSE6nif/rhPEQb5fqR6 + iC2JyUmI7n16Qr1QJv8+RasPKedKHgaFhg9IQxNXkDgD2gNK5xCbnjylDB1pKyLa7u4JZYspKn12 + f3/nGZkPTNbBvYekOEgTP3lAEnNMrsYOGXjymfbIbSLCn7K2pACMTBWZgAdkofbIbsDYkBNMVoj6 + IMMoKwSUmnpGTERSSlQnw3T/6X1KAZEUHuySg/6Uwls29vdJzp7d26Ok08kpmfYnO6R0D/YJR+Lb + B8TBpFq02acHlHsiHbLzKWV07u/s37tPiyHEIdB7D08opy/Nnu6QuiXFco+iZsLqhFLm5E3tHVNo + TZR+qtBIVZHxvL/36T0yUPfJzT6lxPw9Ss2SeJHsPxG2PH5yuk85+AdkKoiXKAd/QKt6tJ5GKXRa + rNknNSXNnlEW7Hh3d/fJU8qt7N578uzZfUqwUJhCKXHyTEm/oVOabYoXSfvtksUjNr9HYSWlK8lA + 0EIcabtdVtH3kV0iH4MSKg+JtkQCZOUpSU7RGa0JfEq9PNolPXj/lDLcT0+ePXz6FOYbc7dLTgmZ + 9mc0PbS+9USm4fTpQ3jz5CIS81DE/ZCcPJKBZ/ukOWl6nlJwjzGckn6m/326//Rk9ykZ/nukKU+J + FGRRIH/7D9lfodwWpQop/UGmhXp4Bs9x55SMEHkcu6TLP33GRouMK6lU8mQpXCbH+yExKXnS98i7 + Jr+cLMPuM8483qflo91n+9A2T2nYZFVoBYUs0v4eicEz8sVIXXKnx/s0fc/IppJGpOjlHkUkxHfk + yj8l47FDPaAZoUSm6IT8TiIrNSZn4ym5KjsUhxPFD46JC9ApydI+5VxJB+48fUqDe0h+y/4z8pRP + 6BUydWReGBpZ+FNKRh1Tvp3yx5T42ru395QWGk5On5LGffCE/BU0I1yJWORlULKF3LMnlFi5R5kx + 0viUNqf/PZVOyZMl15ry/Z8SZQmrA0KWfJ6nWNLY3fmUpgWuw6f3j2k+7h3sP0GuhFyqT8lL2EFg + SYqVxv1wnxfJP71/uv/gmMK3Y1puI6k/IRzJbadYlCLDJ8Q/99k8UzPyCEjh71K8T7mTp6cPKDi9 + R6id7O2Tob5HDIdmn+6QCjx9dvzsU0qyPqGQ9+R4f49WuCm3QDmLT3c+5an/lGJSUlsUQJIVIWAk + fQfk5SF0Jom9T44Rm0Bqdkqm+VOytoQvGeS9Hco7P/uUrBPp4d1j0nfcKWVcqS8iCKVHiB9J+9Hg + yIOiFAql6o/JaeJmZAJ2KNCkySaJP6U5IZmmiAooH5CjTtLIzSgfTIm0ByQD9PPe/X3KjpFiI7+E + Urz7NBgygdyMLD8lKx6QAqJQiLI35IGQwaUcPlTLwR7MDEVkNCWfPqPgiNTIM6SCSAFSTo3CC+Jb + MsHEDSewgZ/SYMhDRIhIKUEKc08owKL8CDmOOzv3yDySqQTh6J2Hzyim3n9KQdLOM1q/JBVF/j1x + PPVAzq3Ql6Dv3rv3KYQAcczx3i6t+1ISmzIATx4ck8rjFNanhMj+3imlm0nMiYsoaiRt9Ix8zRNy + zZ7eh3rAUGlMpKsoIiE8aEENrhuli46JoU4+Jb1DyQMeAn3xhBIsNDgKnk/JaSGpPabwh1bCKEa4 + //TZM+ZLSkM8vHdKIfP+AwrhPqXInziI0hhkL2iSPyUfkTsl/5Ws8f17RP8n+0/IFFB+iLJTlPeg + VQB6h1xaslrki1PubY++oYBm/x6lCg7u09STKaJpoIzMDqWbQRDy1x7uk69IXENZzOM9sgUP9gnc + DnENTR8FiUwQysjfI9NC+bxPwTak+ih/QvNLIRzlnyjQZT1I2p1yEyeUPKboieze3lOSdZLe3aeU + jKJg/0C4nDQW5T2ePCUOeEDcQTAoRUmyvUtCcUIa5/Q+zykBIF+GItwTUuB7xJGUEzylhXxKfd17 + QjqRkAJBHuyQp0dtnlIilf4hLUlp+GPKGhEXkyWgjx6AIBRzPiUIZCbvE6VJ9sl1ofU6MjOkzWll + gdQNJusBRUyU5qOxnnLqnDyje/QJWUOal31aD6BUODqlteMT6o86eUaD+3SPwmuaV9J4FBTQwsQ+ + xcWU4H5Azg6ZvQNSZDuURtgn4Tk5OaEhkadHOZ59Sp9h6h+QTdl7SKr9mBxHIu8zIhs5aJT+pcVT + mgqaIyYI+a4UW5FdJsVGRpfyAHuEN6VXn+yRi3WfjCKPlHJX9w/2SVdRS3JEKXwiLUM6nLxf0jcH + 5GDzECiThPkii4l8Iqk4+uP+Hqlm0p3HD55SxgRT/4CUwjEZEfLtSVaP9ynGJGkkx2SXgkpCjYJm + zqpTO2J5cqN2SVGQ0qU49VMKzsmc0mukt+/fY+eBmPRg71PKDt4n15yWoGh+aWni+OQe5e7J+SYT + +YQpQok0MnQPSTvSEulTcmlomkjePiU7QL+jM8QplFWC/aNwghzTPVp8erqzR5x3+vTp8acnzyiq + o/Vv4EaWjehFfEOZgwPyP2jd5JTyJ+R9kbKjQOUpGzdy9GhS6KP7DynOojQcqfmDk539E/JbKGWw + Q1hzM3LP98j/2KUBntwnW05G4R4cFmK+fYq2d3bYMlDI/vTJp6dPKFp5uEMW5xkZTBLePUplkAJ9 + QskddlYfnBxQboAWq/aJAJ9StPyQnDbiOyLdDnmrlKPhHP2DE3Jlj4kLPyWPkhiP4jiaOSIi9UDu + KAV7IlonWNGiYdDHpHIpnUAJDFrlodfJDFM6RtY2HjylXM5TCsMo5jjdeUrLPHvHZADIvSdS3qfk + PpZK0OxT8tMPSFNSsPH0hBQ+OTmgA7m+xw/2KOzjoPIBrVDsPSDglBF9Rl9SCEYOIi12P6RMA6nl + JyesHUh73CdiwHIeUCi+S6qD1pvu7ZEiILI8IH+Eh3Cwc0JriKSuiCQkAeR379FyIMkguWX3nj49 + 3r/HkcXB7gNiQFqOe/DshGJB0pgPnhCJyF6SMXtKCoVUEpH3gIKjHawI30N4f0wQiUv294+f0Jwd + P733hBa2wSEHeySBu09pse5g9x5FXQRg7wFljE6Pn1JWhAizz9HiAQVgZCwfEmdTDobW20/IzafV + nH1ybklDPSMJZdz2Til6INVN/VFQcUL9Hz/b3b/39AlFNyfPKKdCfg2Qu0fBIzk2FAbtkzvHuWaK + Q4+J0e+dPDmlzB+zyAHFNuSVkctCzjtcQ2Jd+vUh+RgUPVNCirwpjIFmjmRwn7JcpJTu7e+SM7RD + K0uUjSAS7VC6lUNZWgqhHCqp9vsn5Lgd39sn55isKHlMtLpBbEw2jw30AaFLCv7kyTGZrn0KmB/e + e0rOC2mZfbLupGxP2R4d3DvdJXeNtAqpVHJ2iQ9Ii90/vn+f4pmDUxIW5jjKDj2jrPynp2SjMUry + vmkhhNYkSF/S4gjx8x6P4T6p0Xs7JMeUdH5KaZqnpMSfkLGgla9TsjQ7n8qsfrpHLsfpk2fPaPGN + 3ADigh1yCCg9fu/0lJQkjY2bPXhwj2IhSusQNrQKSUkJmvOnnxJoync8O9mjRRBudnz/yTElMx5S + HECSQLP36Sk5FKSTKTVKFoO0CIbw8B4leknPPNyjvAJsGOl9It8pCTCZYbLyx1BdhDiWGsnnISOz + S3aVDBKFJDuUdaCp+3SPEio80ifHJL407eSgUXT0lMJoYoQ9eoMs+vGDT8mbl2kg7vmUDOBTWtQi + PtylVCbR7gEp9WPir2fHFCXzGEhBPXlAwQQZWeJJMtHERNQvraSSd7hLCoGDsoMTSt0gUvyUDC0t + jT4h7jmgRDk5efdIzEjKTmG3Dp6SlH5KtvThMSkOUtM7x8efkgaGS0zqlrpgB5O0/A6pP1IbREFK + ItyjsZxQTv0UYRQtHz18wrn8A9KDJFM0S0/JK4Q/85CU+P5TSm4ePyXppyVfbkaaiKbpKbEwWaMT + 4pX7eyf7+xTmUUaAhIm8tkekcdCQQn7EIGRpyS8m8p3cp+zoPcp1kV2i9QTJPZDnTOs8B8ixkVtG + NCVndPfeCRmbUyIWGeT7HGpD6B7u0UhpFf6EUiNkk8AI5HTcJ5UAz5p9wgPydUmrkL2Fi7R7//ge + JXtJjCiTQSqXJufpU+hCZCxIaxyQW0mJtYNntLL4YJ/iePJ/SBmeUPZLGJgSOAcU8hE4Wtog1/yU + 5JPsIanknftP9/ZpPQlDQFTxdJdUB/EbsSeR+j45cRRtHu8gob9Hv0qzXVr2Js1879kpKRrKP35K + IRBZXHrrhFaGyCCgUxoluQj3yQkipXBMtKAUOGXSyPg+pZhlF1qNoVGW8mTvCb4mvUypGHiENBBK + ZZH3dZ9Uk3RKri9ZrD2SdgpUTo4p/08q45SYk1x08gE+pbVUohs1Jw+T3GnSR0+IqShVQ7aLfLP9 + HUpakLRRKpGhnZL9oYQsJagodfqMIvM9yhId7D+hnC3pfwoSuRmtNJCgnhLtKZ34jJoRo1G8SDkZ + skFwpYlu3I6iqpPdXUKPQnXy5EnxkHdOVhuRzhMKvlikH1KalywuZYkpZjx9QHxOCJw+JJeO0HlI + iwa7+3AzHpKQk6SSdqdlbHIeH5zu0or0M3Lm7z2l8ZIof8pDJb+BqP/0mFIK90iVkFtJgkipRzKo + lPgmtcai+pAUHq0qfUpLpeSrwLN+SLr//pMDciv2yQsnLcO4USxHce7OvX2iBHEteaq0SkQoUvS7 + 94zsJXUKaBQT7pPY3Sd7T0rthHyaHVLr5JfQ/46JWWlllvwHynTtkYqidRJkeYk5dihuJXamaO/e + p8QtJDvc6QFpP/LDSPPRivi93SeUI9k53Xv25BkZKtKbFJXySCkOv/eQFo4OKPCCKiZFTvxBpKMU + +c7xE3KiBbeTB2QTaFmPAlVKvSNfRouT+8QbBPOYRJYF/yFpFgp8aZ2R9BkFj5R9JA7Y2XtGTfYf + EvvLyhaps1NyWimX8WRnj/JK5NHRKvA9YlLyZClYJQmQZvcekLU/OKb8Milm0pnE0DTonX0iCiWb + 793jsOHhwwf3SMuR4UeegDwVWnkkf/oBxebki5Jz9oQVJukDUmbwHsnxvU+BwS7FcQ9O7pN87D+j + +Iuy7dzsCbm9T2kN+YSyJpSjI0tFsROZDmK2Y9I+JAJMN1ps2d15tnfyjIwbWXEy088oaUIGlrQT + cRn5Cowb5ZZ2yH0nopwQl9AqDDXZv0d+A+XO9/bIZ+YM0MMn5MwTOzw4JiGk9M8u6ZITctHIVFNq + nFS7BG80smccyj/ZIaiUE94hNHbJv7hHPtQzUmv3RJ7J7XpI9IVeIB68t/uUNDa5O/f2KXlBSxNE + Ke6UOI1CvGc7n97bJXm+T5nznWd75GgSJ1HeggbOriNFR5Rae7hDrvPu0ycUztCswzmmGHqfuO+U + TB43e0pwycSQUN1/dgzZo2UcWoV99ow0Kgn08f6n8LsoOfSMQnBaJaMRH39KuWFaDKZF6IdkVYl4 + lNxj7+EhLW6QzD4g+0zqnvIAu5QMIKVFIRTp8mcUlMtkkWYnX4/WjUnt7d8/pviIYqK9fYp6SJM9 + JdeZvbiHlCKgyTp9Bmf54OEDcspIhkjNkKwQw5EjpM2ISUnuPj0htUKx+A5lNImw9yj5Q+K7u0dS + w7g926GVMhID0jmE2T0Kevf26DVCl3AkhU8aCeR9tnv/5Aml0/Yo8CGqPeF05j0KLInPSe18SuuG + cB0prtsjL4R86Xt7x58S0+2R7t+5f0I5D1oiojTsniD3jFx9rLFSrojCE1pCoACB5ojiQZp+QpW0 + A+hLqwSnhPIz+oLSQZR3pBULUpS7u/eh6+4jQKJOCVnEGvs0fJoBRKMnpP1J1EiHPKNMPHkq6JTi + oYc0MQdY1SVnmjz3A1pZ3dvdPT6lMT8j3UdKGs0OTj7dp/jjgML6A5rOUzK8x8SshCS5XaR+duCL + kMPxlFZpH9CyKKnB3QcUPj+j6IhItEu+4i7FACyox6Tsjymip7zH8VMa2qfkbRL6T49JpslK3b8P + fwrNDkhgKFIhkSBaUh7jGXlTBwSYnO1P75N63AdBjnePn31KqorSXzun9A5ZpocksjRflCc4JTtA + DiZNKjnQD08pj0/Wgq3hU/ofSQotad8jchMlSePDHB3T7HxKS65Pn5JTQkkEErOHFBbQKiJxDXmY + NBwB94QCQIrfKYtEhnGPbNPOE9Lo98iLpzz00/vUDNNAKwH3KUdNYRg5jaTkH957drxD2oTeJQeQ + Ei4c4FOCcY909N49GsgJEiK0fEc50GckWCRfpFREwx2T/NNqHCmYT8nvIq4gfiPL/HTnKXlYZDXI + 9Egz8o3gXYEFPyV/9t7Bg3u7lJ84/ZTWXClNisV2bvfwU9L5tAy0+/ApRWPPjnfJD6LVXPLiKPom + J4MF//j+LvmEFPOdPKV45ZRoSmxE6xukonZoXfaAyP5oj7xpcp8w0genxAYHkFNa6Nx/sveMvCEa + 2LOnz2g5isE93Dmh3Bqlxki7EvscPyWX8IR0F616UA7hAQWNmNYHlInc2f+UPKKnpHjvUdzx6VOy + UrtkpU9PCLUTCsyoGTlUz4jJyS5RJpdIT/lk4qid++RIkG17Rq4LE5gMEnlve3sntLBAy2kHFD6R + tQHPP/mULDRl76QZpVtpnk5ICZGxv0fhzpN7p8dki0Bx0u8P2LzRoMkfIjI/eULW9IQYgNKSJJZk + zyBCDx88Vdzok6eULHv6jOKe3QcUxZNoE9eT0FHMSf/QPFAzsqYgyQFxKDlnxFa00kzW7uQpBRr3 + KWFN65rgOFLaJxgPJdpIjRPpeF7IJz6lqPoeRdgc4VM6hPyFU1IGlOF58nSfJvMJrZiSEn9ANuoJ + 5WRY21CzXVpnYul/9ozc7PuUL4XI7z399CHNIy07sERTJHSPbAJl/khnUVLthKZ8h4JyCuV3ybKc + PmMreEwZomf7+xRGfkpqmjTR/u7+Kf1GHitlT4j4os1JTp7tkx/4Ka1qkb6hOJaSmOSSkNWneX6w + R5SWZvtYOyUnhkw26S0yJA/3SYKOKcp7Qp4bpZcQvR2fkLUjTQMyE6ftUzr+HvmbpPMeUKbt5Ol9 + 0qugG1nvneP7ZBDIrXuIqXx2SlHxCfliJBIP9yheY7pRJoWiJVrTQs9k6GiyyfZS+EKZlfuklsnj + xkhpBYz8NXJ9d4hXSYM/Oya9uL9DRuzZ/V0SbjIhGAKFWITfPuWjKbi69+AJmVyiNSVGH1Ie95iU + GrvSlA44IPVAXiIxI/l9xG775OpR0EVh9z3idTIhNAQsvXz6dO/pkyenD07unx5TxEAC9Cn5IcSa + 95/Smh9raUp2USp8Z4dyZs8oTf/w+Jg8kx2yg58SynvHtLrLFoS8YEr7kERRWElU2yX78Yy+fHj6 + 6VMKk8ksn+xwp5TXIT1AThGxEuVF75M7TZqRjBQt3lOkT8TkTu/v7t9/SssZ5KqQK3NAVo7cD7JX + pDEf0gjIZIJu1IzMJfHB7v4TEnTS6E/JRaPpPf2UnOj9PVKG0oysH0nugyefkh64R14BNSLHnNQo + rW48pXiTE/BPKGNBMRQl3Mk2kBtLNoG8x52nNA9kbYj5ZJmJmp3sPcHKOWVY98i6kotLTjjm6h6t + thO73+Nmn1KanXI75LBTbLZLAfQTWpEiZUfMRGb9lNQLj/TTB/ef0jrOHvynpw8Jlftk6khl0/rq + yR7ZuRPOYD6hvPQD4uZ7e6Tx7h08e/Lk/g4NhVzd/QPyT4mzSV1SM2K3Y3J+np6SkiHs790jX5Ec + 04Pd+yf7EPHjezxZxEH3KOdxf+fklOQdcTalcgkmRd0UHD579inbSgpkadS7lKI5IOtJxCaxphwe + heykUHbuk7zy+gbphgcU8jzdfXr66R4tTD2k3CClC07JttN07JJ14XX0J8efIja+f/qUCHuPuqf4 + iFzUh+SUsVkhncTQaM2QlPqze6SRj3fJPD8jN5/49+lTWu96cvxkn9xQNCN1C8+aVrrp/zRdtHpB + wnp/l8Llk2efPnmqs0ASc3pA4fgDUt7PyMDvHBChj8k5I/+JaEohBzcjelHETgJ9TOlfWg05poTJ + E9jvT8kvojcOeI2fPAdS37ToQyqe+IKmmMi6TxJDWUTKkd8n+8B0o6B+/5jiVqIqeQjkcB08gaUi + tjm5T6rwGS2D0JxSTH96j8T8/r3dY7JDxySxD093nn56QpkAsgz3KA0CaCdk88j9J7LRCjXEmnJ0 + oB/5ZSRxDylQZjlF3oVMM6XXiINJgd37lAzEAbHbA1qSvE9rcGRQ0Yw49ukJpQmItygGIO366aeU + GKXEDxmpgwPS1ZwPpWb34e2c7hDPHZxSBoWMISXs9j6lIJJUIjkoDI1yVaQyPqUczn0SXrLMZIE+ + /ZSU1lPYuJODB9LpPYqp7lO0tLdHDis5lw8ekHJ68Gz3AWVkSa6enLAmP6Gs0KcPiOD3KY9M0S7W + OQgvsug7pAIP4GvCfBDJaaGM5miH/J8n5FI8Jc3+KfleZPQfnlKoThaQ+I1ylPufnt4jO7z7jJiV + hIdE+t7Os31KLhOn3if9zs0ofUsa8tMdwp0E+cEDWuUnH+GAFC255WR8MFIg9/AeeZckk8Q8pOl3 + 954+JW+J1oQpZXxAGUqabrAIpRl3nxIrUNqIenuAeJDCuN09ykdTSEQwZTEVUQ6R5x5pLCIoIfiU + 0pe79/YpXqAYZIdyUJyZJDtFWXAKN8gXuH+f5J2yA5QTIeR27xHpyJdmBUfJU9LIzyiIIQVHfg3l + X5/tEpnIV35CfsIp2RemL00KBR73KEFGiT9yj8lmkRySNaEojTiPGAjZDmpG9pmIu0t5rOODJ2S6 + KAiiMZ4+u39M/ELrxwLt4AkF8vukPD79lJIjtAhI4dvT46f3Scc/3XtGq0nSjJJ0eyTxT8klpswo + ma1nlBvdoeQOhfL7cFB4CM+I8x6Qu0H6kAKHe7snlLYn4pBiJZKS1JLDvQdwpJwou71HigDZShLa + T58QwuRFkdicntyjiBTgSAB2P4Vmu0eiSR3ShJMV/vTT3Xu0fnv6YO9k7xm0CC127T2gpcSHT+5R + Pur4009Jd5KuJHYjBUQ0JfcGY3hKuZeDe7s7xOYko/dIICmPd49C+4f3KQNACVRaiSRWotW8B6cn + J5TJIWtF7L9LHhUZ6BNyq8g3oUhuh7UvDYpicYqYaQ2K1gtBZopGKR9LVueU3HIyF8jY0JDI7uzR + gsHTT3fJJJGfRI4gmRlicEoPkE5np+DpPXLrTmm2Hzw4odwyKe99cqZI3O6R3JKGIbcExu3p/vGn + e2R7d55QzxQWkLInZUec8uBTCgCIv8hBBjQKRHeIucgLo3Wve0Rt8sH2KPNK2b1dcmCIm3kIpOn2 + Tu9RwoIE5ckuRXSkVkgl79CEkBzeJ0vGs0AuCYUAZGc+Jeo+Jd+GnFBKH5NbcHK6Q6qUskmARu4x + cSwFgOT3k7NPdDqgqXtCKRVKZ1LURBpOm5GFvnePKE/LDzv3n9CCBzUlq0De1AEtUrEipGZ79ykH + +YAclj2SajJbFJzukCdKhuD0GaVl2Y9+Smqd3J5PKRdM4nVCQkK5LBrfKY3gAQk4RXXc7GBnF9lP + TCVZ4/tkxO5Rfw8oc0fuIYVUFEQBtwNa56VMDQWyRBfKfRw8Ob3/7AkldU9onBT+UkoaBCHH4+mD + E4pSyS6f0tIU5avJiydd/oRCGoqwHrB2ePqQlt1omZusFRk2WjymxMIzMvEQUkpSUOaAw8WnDyn3 + dvqQLC1pfFIOD3cgCwd7+5R/IOEkYBxYIGlHvgvlJok7aSWVTNJDAn3vHvHGp6SnKODjTo9Jv9Fy + G+nTJyf3nxLyJPlPP927/+RTClCJD4lDuBmlDslSUExKs/yAVkgJAervHvUObUfmWDq9/+QB2HH/ + KS1UU9KDWOgJOYKfknRQDohk/Cl0DQ3ngDJXJPq0GkweGnEvzRMZE5onGij59jKntMb5jHQ2+c0P + dshowURTmoj8lON7FHkdkyZj3Ci6Pb53Sq8RTY/Jb6Z+TpGzI5/iU1rwp6VAbgbN/eAh+ds0V+T4 + 36elEgRmzyh0PTi9//TT41OeU4pNiLp7pFJJNz+jzCVR8N4pJdD2nu0iPj7mfCOpkxOSIHDgPtGc + uIk8QFo32afwdP8ZvfKEcydPn+2dfgrzSHQg1ElvEFeQliGxoAwx6VsJZMn7JB48II/2mHjpwcMD + cuop0UJKkSaOiHfyKbMl8TM51U8pY0c+zd6z+08oR0Ce2vHTp/TP/X2aGVKXaPaMPn1GfhtR4hl5 + Ag8pG0KkeAjde5+kX7wk0hPE4yQy5FvcoyD0ISkBakHcskdeAvydhyAIRfTE0Dukrx7uUFxEfhep + Q9JXu8/uk8B8ukP+KtiS5vHp3qdP9ymZsUcW+ek9EgVaGL/37Amlf/eQ9GHv8nTvHrnBRP09croe + kLomkp4+JZ+SLN5DsrFkHxk3ykc/JYVCyS+yNbxiSBn7fRglCtyf7JDHybjBjSJI94g1KOwjq0dM + Tl7afXJF6BuK5TjrSwaBfNUnJ7TCS/xF4sXcB5NAYE9J8ikKBG7k5J6efkqJefJj93eJ9Z/R4uYJ + qXpSSGTf9h+wAJ7eP6VYmL7dI1mn+aUwBxBJw1H2gdxy4gbulOwNZf2Imyj2J1eBSEURI9kYWiQk + v4RMPsdGJEWUcXpIy84UQVKYt0MrRrCvn1IUuUMW+D5lVgGN5JUcgT3yBED7e4iZ9kgzk5bdo0T4 + KaHAQyD2IDE/3SNGo4Ca8l1EC5Ii8o0pm0mDo7VlNCNtQJ8SWakl5a0Qiu+S2SH1R7H0kyeklx7t + km07pTn6lHQ7hbIE5lPKDT549pQYmbxuQpUiDFmYPSXH+eGnJDa792lh48ku6QOyurTASNOzd/yM + ZJPAUTOaN0KNBkUKgJyM+2TDCPlP71EAQgxAOQXWXASL3K175Ajv75DyO7m3RyK7A56mEP0BZSoP + HjLhSF+SxTggZ+LJHtkNyiiSCadMwD5lmZ6SM/aMtSo12ycVTuxHipO03f0DMpOUFNkhv+spLRQc + EMMxNEonPCXH6NN7FKqDgWGjaU2AfGgi0QPiIGY4kkfK4O2QgTqmSIisFmVFTmiqyPSTo/zw/i7H + AsgckFkj3Uih+w6NgdLupDwosKXUIgyQ+INkOCiJTWvhn376jNw2SqpTvE4yf0IUeUqzS+SGh0G+ + 8UNyAEixEkfu794/JYEn5Uk5GVrAJi6mWENwe/gpha6kjU92aZ5pLkmtPN1/9pScL2J9cok4XUNu + PTEhGVk42SSg5F48obGQ5Tig9P8eKV1hkWc7p+QJk6tN/hmBIvYlVju4t0t+KOXIaJGTwkAQ7hm1 + uk8UpfzRKZGXnFeK5IDtDnkUpOdP93gMNDOfEiPtUNf7z6jR/rNd8tzIWN8n2aIEOsWo3OunFFJR + Lvd4n+b6+FMyHRSzk5dMHhA5kZ+eUKoOhHv25OSEIuoD8siO944punpA2ah98iLv7T15QKqUYgbu + lKL6+9TpvfsUQxEjP6G1gk8pZ7LzgJQqLds8ZLVKWZRPn5HSOKFMCfmSBOB0lzAkpUg5zAMak6y5 + 0UBpgon2tI5AYyFVvE/hPeW9Dkhr7u/cp3SyNKOECBkbyms8I8O6D4V6QjxFwdM+LXEc7JMNJEfv + GSWNyP+iDBjhTkD2yLU92dtnbwsphH1aJQO0vYfkQNMwaUGWnGNagCTUyFA8oNzTg517FPqwaD0j + ISEopzvPKN9IaoTwInbcIZYmHbJ3TG4O+6o0CSTqz+6RDSC+ptiEXLVdcr/IEu8f0/jJrgg0Aktr + iAdkl4knKOSluSe5IJ7YeUh/k2ph3PZJdT0jyXv6hMh5cu/Te6cU7lM24/Q+uS73KVvE/iC5UU8p + Gb1P7ET8vffp02ckDDvkEdJ6NKW1yI3nhOkzYl4KSomkpEeIbsSclF56QHJIU0r8TzPEuBFjEXOR + d3pMwrmPjN7uwaf3Pt2laJ7Mwf5Tcqa42b2n5GiefErRC/k0uxQ7PAB9npySxjklHSs+/jNaBCBR + oE/p3b29J5SsIb+cTPn9J/eentDgH7LYE0eS60bqnhzaXVqP3KHUKWXsjonzyViQVNBIAe1g5+nJ + 6T0yKp+Sr0Au5f0TMn5EvV1KQO7QtN67z7NALiQttD27RzHNDuXEyCZTMo/E+j7YhlYwaNkQnZJj + uX9MhoK8OtIYFFJQ5pI08T65tGQx798jJQ26HVNHO59Slh1f7D+jhWlaTn9C5HhGA7pPETdb1GfH + pCr29wkbSoRRnHKPbCml70kD0y+kQcmJ5yE8IYaEOJN2IBeUVhU/3SGdfwzvjcw1uQyso2m9lghL + TElgKc9C6X/C6RkFhBTMk2GhKFAmi+weccQxWR9SBaQeyPB9ukfEeXCPpmCPkuusa55Rcu8+rScR + 8vvHlN8h2/1s58HT3Qe7pJyIX0l4uRnM7gnJNi3w3ic1SchRco+sMuWAKBp/QFLJIyXDSTy48ynF + x/vHNBtPdk8+Ja1J3grR6h6lkElzoRml7imPePrp0/ukTT6Fe0EBMqG7R44jqYGHnPgj8SGGO35A + gki0g40hbUhuNxk3Ml8k1KTf0OwZqetP79+nCOcAFpLULyWliB12iblIJJ/usqUkT/f+A8rA0nrw + LtkoSuHef0AkIsVP2uIZuRzk12Ckz8jG0pQffEoLQJT1IB/iHlknarS3Q5xNK5bCIc9OKPIjJUUi + Q5r04adkmognaeYJ4C4tcVL25/7/AxfkfN8fTgAA + headers: + Access-Control-Allow-Origin: + - '*' + Arr-Disable-Session-Affinity: + - 'True' + CF-Cache-Status: + - HIT + CF-Ray: + - 4d12d13f7f3769db-LHR + Cache-Control: + - public, max-age=2678400 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - text/plain + Date: + - Fri, 03 May 2019 14:10:15 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - Mon, 03 Jun 2019 14:10:15 GMT + Last-Modified: + - Wed, 16 Jan 2019 07:29:47 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Powered-By: + - ASP.NET + status: + code: 200 + message: OK +version: 1 diff --git a/tests/cassettes/test_validator_hit_recording_disabled.yaml b/tests/cassettes/test_validator_hit_recording_disabled.yaml new file mode 100644 index 0000000..014d4b0 --- /dev/null +++ b/tests/cassettes/test_validator_hit_recording_disabled.yaml @@ -0,0 +1,323 @@ +interactions: +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Cookie: + - __cfduid=d310f3995592b10f8eebc24787a44879f1556892615 + User-Agent: + - github.com/craigloftus/django-pwned-validator + method: GET + uri: https://api.pwnedpasswords.com/range/5BAA6 + response: + body: + string: !!binary | + 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 + headers: + Access-Control-Allow-Origin: + - '*' + Arr-Disable-Session-Affinity: + - 'True' + CF-Cache-Status: + - HIT + CF-Ray: + - 4d12ddd0597ebb88-LHR + Cache-Control: + - public, max-age=2678400 + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - text/plain + Date: + - Fri, 03 May 2019 14:18:50 GMT + Expect-CT: + - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" + Expires: + - Mon, 03 Jun 2019 14:18:50 GMT + Last-Modified: + - Wed, 16 Jan 2019 07:29:47 GMT + Server: + - cloudflare + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + Transfer-Encoding: + - chunked + Vary: + - Accept-Encoding + X-Content-Type-Options: + - nosniff + X-Powered-By: + - ASP.NET + status: + code: 200 + message: OK +version: 1 diff --git a/tests/fixtures.py b/tests/fixtures.py index d175004..a29e249 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -1,5 +1,7 @@ import pytest +from django.contrib.auth.models import User + @pytest.fixture def bypass_config_cache(): @@ -7,3 +9,14 @@ def bypass_config_cache(): get_config.cache_clear() yield get_config.cache_clear() + + +@pytest.fixture +def make_user(): + def _make_user(username, email, password): + return User.objects.create_user( + username=username, + email=email, + password=password, + ) + return _make_user diff --git a/tests/test_backends.py b/tests/test_backends.py new file mode 100644 index 0000000..9e02f1c --- /dev/null +++ b/tests/test_backends.py @@ -0,0 +1,40 @@ +import pytest + +from pwned.backends import PwnedModelBackend +from pwned.models import PwnedRecord + +from .fixtures import bypass_config_cache, make_user + + +@pytest.mark.vcr +@pytest.mark.django_db +def test_login_hit(rf, make_user): + request = rf.get('/login/') + backend = PwnedModelBackend() + user = make_user('test', 'test@test.com', 'password') + backend.authenticate(request, 'test', 'password') + record = PwnedRecord.objects.first() + assert PwnedRecord.objects.count() == 1 + assert record.email == 'test@test.com' + + +@pytest.mark.vcr +@pytest.mark.django_db +def test_login_hit_recording_disabled(rf, make_user, settings, bypass_config_cache): + settings.PWNED = { + 'RECORD_HITS': False, + } + request = rf.get('/login/') + backend = PwnedModelBackend() + user = make_user('test', 'test@test.com', 'password') + backend.authenticate(request, 'test', 'password') + assert PwnedRecord.objects.count() == 0 + + +@pytest.mark.vcr +@pytest.mark.django_db +def test_login_failed_hit(rf, make_user): + request = rf.get('/login/') + backend = PwnedModelBackend() + backend.authenticate(request, 'test', 'password') + assert PwnedRecord.objects.count() == 0 diff --git a/tests/test_validators.py b/tests/test_validators.py index 54cbae2..b69a6ab 100644 --- a/tests/test_validators.py +++ b/tests/test_validators.py @@ -1,22 +1,75 @@ import pytest +from django.contrib.auth.models import User from django.core.exceptions import ValidationError from requests.exceptions import Timeout from pwned.validators import PwnedValidator +from pwned.models import PwnedRecord + +from .fixtures import bypass_config_cache + + +@pytest.mark.vcr +@pytest.mark.django_db +def test_validator_hit(): + validator = PwnedValidator() + with pytest.raises(ValidationError): + validator.validate('password') + + +@pytest.mark.vcr +@pytest.mark.django_db +def test_validator_hit_but_under_threshold(settings, bypass_config_cache): + settings.PWNED = { + 'OCCURRENCE_NOTIFY_THRESHOLD': 4000000, + } + validator = PwnedValidator() + validator.validate('password') + + +@pytest.mark.vcr +@pytest.mark.django_db +def test_validator_hit_no_user_not_recorded(): + validator = PwnedValidator() + with pytest.raises(ValidationError): + validator.validate('password') + assert PwnedRecord.objects.count() == 0 @pytest.mark.vcr -def test_validator_found(): +@pytest.mark.django_db +def test_validator_hit_recording_disabled(settings, bypass_config_cache): + settings.PWNED = { + 'RECORD_HITS': False, + } validator = PwnedValidator() with pytest.raises(ValidationError): validator.validate('password') + assert PwnedRecord.objects.count() == 0 + + +@pytest.mark.vcr +@pytest.mark.django_db +def test_validator_hit_recorded_with_user(): + validator = PwnedValidator() + user = User(email='test@test.com') + + with pytest.raises(ValidationError): + validator.validate('password', user=user) + + record = PwnedRecord.objects.first() + + assert PwnedRecord.objects.count() == 1 + assert record.email == 'test@test.com' @pytest.mark.vcr +@pytest.mark.django_db def test_validator_not_found(): validator = PwnedValidator() validator.validate('8CEF1E00B20F463C1E48B589B03660D4E3B9EF7A') + assert PwnedRecord.objects.count() == 0 def test_validator_api_unreachable(caplog, monkeypatch): diff --git a/tox.ini b/tox.ini index 2e160fe..c82003f 100644 --- a/tox.ini +++ b/tox.ini @@ -5,10 +5,14 @@ DJANGO_SETTINGS_MODULE = tests.testproject.settings envlist = py{35,36} py{35,36}-django111 + py{35,36}-django2 + py{35,36}-django21 [testenv] deps = django111: django<2 + django2: django<2.1 + django21: django<2.2 .[test] commands = py.test setenv =