{"id":13531268,"url":"https://github.com/springload/wagtailenforcer","last_synced_at":"2025-07-31T16:31:44.267Z","repository":{"id":33266052,"uuid":"36910594","full_name":"springload/wagtailenforcer","owner":"springload","description":"The Wagtail arm of the law - enforce security protocols on your Wagtail site","archived":false,"fork":false,"pushed_at":"2022-03-01T21:49:30.000Z","size":192,"stargazers_count":46,"open_issues_count":6,"forks_count":3,"subscribers_count":37,"default_branch":"master","last_synced_at":"2024-11-13T16:12:00.657Z","etag":null,"topics":["axes","security","security-protocol","wagtail"],"latest_commit_sha":null,"homepage":"https://pypi.python.org/pypi/wagtailenforcer","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/springload.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-06-05T03:50:46.000Z","updated_at":"2024-10-04T01:19:43.000Z","dependencies_parsed_at":"2022-09-24T01:51:17.539Z","dependency_job_id":null,"html_url":"https://github.com/springload/wagtailenforcer","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springload%2Fwagtailenforcer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springload%2Fwagtailenforcer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springload%2Fwagtailenforcer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/springload%2Fwagtailenforcer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/springload","download_url":"https://codeload.github.com/springload/wagtailenforcer/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228267806,"owners_count":17893841,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["axes","security","security-protocol","wagtail"],"created_at":"2024-08-01T07:01:01.608Z","updated_at":"2024-12-05T09:16:49.296Z","avatar_url":"https://github.com/springload.png","language":"Python","funding_links":[],"categories":["Apps"],"sub_categories":["Security"],"readme":"# wagtailenforcer [![PyPI](https://img.shields.io/pypi/v/wagtailenforcer.svg)](https://pypi.python.org/pypi/wagtailenforcer)\n\n\u003e WagtailEnforcer, the strong arm of the law.\n\nIf you need to enforce security protocols on your Wagtail site you've come to the right place.\n\nWagtailenforcer makes use of the following packages to ensure strict password policies and other security protocols are implemented.\n\n* [Password policies](https://github.com/iplweb/django-password-policies-iplweb)\n* [Axes](https://github.com/springload/django-axes)\n\n\u003cimg src=\"./cobra.jpg\" width=\"200\"\u003e\n\n\u003e -  Lt. Marion \"Cobra\" Cobretti\n\n*Check out [Awesome Wagtail](https://github.com/springload/awesome-wagtail) for more awesome packages and resources from the Wagtail community.*\n\n## Quickstart\n\n```sh\npip install wagtailenforcer\n```\n\nTime to edit the **settings.py** file. ```INSTALLED_APPS``` should have:\n\n```python\n...\n    'axes',\n    'password_policies',\n    'wagtailenforcer',\n...\n```\n\n.. and ```MIDDLEWARE_CLASSES```:\n\n```python\n    'wagtailenforcer.middleware.WagtailenforcerMiddleware'\n```\n\nSome extra settings:\n\n```python\n# Password policy settings\nSESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'\nPASSWORD_CHECK_ONLY_AT_LOGIN = True\nPASSWORD_MIN_LENGTH = 7\nPASSWORD_MAX_LENGTH = 25\nPASSWORD_HISTORY_COUNT = 6\nPASSWORD_MIN_LETTERS = 1\nPASSWORD_MIN_NUMBERS = 1\nPASSWORD_MIN_SYMBOLS = 1\nPASSWORD_DIFFERENCE_DISTANCE = 3\n\n# Django Axes settings\nAXES_LOGIN_FAILURE_LIMIT = 5\nAXES_LOCK_OUT_AT_FAILURE = True\nAXES_ONLY_USER_FAILURES = True  # Lock out based on username and not IP or UserAgent\nAXES_LOCKOUT_TEMPLATE = 'wagtailenforcer/lockout.html'\n\n# Antivirus\nCLAMAV_ACTIVE = True\n\n# Allowed document uploads extensions\nALLOWED_DOCUMENT_EXTENSIONS = ['pdf']\n```\n\nIn **urls.py**:\n\n```python\nfrom wagtailenforcer import urls as wagtailenforcer_urls\n\nwagtailadmin_urls.urlpatterns = wagtailenforcer_urls + wagtailadmin_urls.urlpatterns\n```\n\nCheck the docs of the apps if you need to do changes to the predefined settings.\n\n## Development\n\n### Releases\n\n- Make a new branch for the release of the new version.\n- Update the [CHANGELOG](https://github.com/springload/wagtailenforcer/CHANGELOG.md).\n- Update the version number in `setup.py`, following semver.\n- Make a PR and squash merge it.\n- Back on master with the PR merged, use `make publish` (confirm, and enter your password).\n- Finally, go to GitHub and create a release and a tag for the new version.\n- Done!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspringload%2Fwagtailenforcer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspringload%2Fwagtailenforcer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspringload%2Fwagtailenforcer/lists"}