{ "info": { "author": "Mohamed El-Kalioby", "author_email": "mkalioby@mkalioby.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Framework :: Django :: 3.0", "Framework :: Django :: 3.1", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# django-mfa2\nA Django app that handles MFA, it supports TOTP, U2F, FIDO2 U2F (Web Authn), Email Tokens , and Trusted Devices\n\n### Pip Stats\n[![PyPI version](https://badge.fury.io/py/django-mfa2.svg)](https://badge.fury.io/py/django-mfa2)\n[![Downloads Count](https://static.pepy.tech/personalized-badge/django-mfa2?period=total&units=international_system&left_color=black&right_color=green&left_text=Downloads)](https://pepy.tech/project/django-mfa2)\n\n### Conda Stats\n[![Conda Recipe](https://img.shields.io/badge/recipe-django--mfa2-green.svg)](https://anaconda.org/conda-forge/django-mfa2) \n[![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/django-mfa2.svg)](https://anaconda.org/conda-forge/django-mfa2) \n[![Conda Version](https://img.shields.io/conda/vn/conda-forge/django-mfa2.svg)](https://anaconda.org/conda-forge/django-mfa2) \n\nWeb Authencation API (WebAuthn) is state-of-the art techology that is expected to replace passwords.\n\n![Andriod Fingerprint](https://cdn-images-1.medium.com/max/800/1*1FWkRE8D7NTA2Kn1DrPjPA.png)\n\nFor FIDO2, the following are supported\n * **security keys** (Firefox 60+, Chrome 67+, Edge 18+, Safari 13 on Mac OS, Chrome on Andriod, Safari on iOS 13.3+),\n * **Windows Hello** (Firefox 67+, Chrome 72+ , Edge) ,\n * **Apple's Touch ID/Face ID** (Chrome 70+ on Mac OS X, Safari on macOS Big Sur, Safari on iOS 14.0+ ),\n * **android-safetynet** (Chrome 70+, Firefox 68+)\n * **NFC devices using PCSC** (Not Tested, but as supported in fido2)\n\nIn English :), It allows you to verify the user by security keys on PC, Laptops or Mobiles, Windows Hello (Fingerprint, PIN) on Windows 10 Build 1903+ (May 2019 Update) Touch/Face ID on Macbooks (Chrome, Safari), Touch/Face ID on iPhone and iPad and Fingerprint/Face/Iris/PIN on Android Phones.\n\nTrusted device is a mode for the user to add a device that doesn't support security keys like Android without fingerprints or NFC.\n\n**Note**: `U2F and FIDO2 can only be served under secure context (https)`\n\nPackage tested with Django 1.8, Django 2.2 on Python 2.7 and Python 3.5+ but it was not checked with any version in between but open for issues.\n\nDepends on\n\n* pyotp\n* python-u2flib-server\n* ua-parser\n* user-agents\n* python-jose\n* fido2==0.9.0\n\n# Installation\n1. using pip \n\n `pip install django-mfa2`\n2. Using Conda forge \n \n `conda config --add channels conda-forge`\n \n `conda install django-mfa2`\n \n For more info, see the conda-forge repo (https://github.com/conda-forge/django-mfa2-feedstock)\n \n Thanks for [swainn](https://github.com/swainn) for adding package to conda-forge\n\n# Usage\n1. in your settings.py add the application to your installed apps\n ```python\n INSTALLED_APPS=(\n '......',\n 'mfa',\n '......')\n ```\n2. Collect Static Files\n`python manage.py collectstatic`\n3. Add the following settings to your file\n\n ```python \n MFA_UNALLOWED_METHODS=() # Methods that shouldn't be allowed for the user\n MFA_LOGIN_CALLBACK=\"\" # A function that should be called by username to login the user in session\n MFA_RECHECK=True # Allow random rechecking of the user\n MFA_REDIRECT_AFTER_REGISTRATION=\"mfa_home\" # Allows Changing the page after successful registeration\n MFA_SUCCESS_REGISTRATION_MSG = \"Go to Security Home\" # The text of the link\n MFA_RECHECK_MIN=10 # Minimum interval in seconds\n MFA_RECHECK_MAX=30 # Maximum in seconds\n MFA_QUICKLOGIN=True # Allow quick login for returning users by provide only their 2FA\n MFA_HIDE_DISABLE=('FIDO2',) # Can the user disable his key (Added in 1.2.0).\n MFA_OWNED_BY_ENTERPRISE = FALSE # Who owns security keys \n\n TOKEN_ISSUER_NAME=\"PROJECT_NAME\" #TOTP Issuer name\n\n U2F_APPID=\"https://localhost\" #URL For U2F\n FIDO_SERVER_ID=u\"localehost\" # Server rp id for FIDO2, it the full domain of your project\n FIDO_SERVER_NAME=u\"PROJECT_NAME\"\n FIDO_LOGIN_URL=BASE_URL\n ```\n **Method Names**\n * U2F\n * FIDO2\n * TOTP\n * Trusted_Devices\n * Email\n \n **Notes**:\n * Starting version 1.1, ~~FIDO_LOGIN_URL~~ isn't required for FIDO2 anymore.\n * Starting version 1.7.0, Key owners can be specified.\n * Starting version 2.2.0\n * Added: `MFA_SUCCESS_REGISTRATION_MSG` & `MFA_REDIRECT_AFTER_REGISTRATION`\n4. Break your login function\n\n Usually your login function will check for username and password, log the user in if the username and password are correct and create the user session, to support mfa, this has to change\n \n * authenticate the user\n * if username and password are correct , check if the user has mfa or not\n * if user has mfa then redirect to mfa page\n * if user doesn't have mfa then call your function to create the user session\n\n ```python\n def login(request): # this function handles the login form POST\n user = auth.authenticate(username=username, password=password) \n if user is not None: # if the user object exist\n from mfa.helpers import has_mfa\n res = has_mfa(username = username,request=request) # has_mfa returns false or HttpResponseRedirect\n if res:\n return res\n return log_user_in(request,username=user.username) \n #log_user_in is a function that handles creatung user session, it should be in the setting file as MFA_CALLBACK\n ```\n5. Add mfa to urls.py\n ```python \n import mfa\n import mfa.TrustedDevice\n urls_patterns= [\n '...',\n url(r'^mfa/', include('mfa.urls')),\n url(r'devices/add$', mfa.TrustedDevice.add,name=\"mfa_add_new_trusted_device\"), # This short link to add new trusted device\n '....',\n ]\n ```\n6. Provide `mfa_auth_base.html` in your templates with block called 'head' and 'content', The template will be included during the user login, the template shall be close to the login template.\n If you will use Email Token method, then you have to provide template named `mfa_email_token_template.html` that will content the format of the email with parameter named `user` and `otp`.\n7. To match the look and feel of your project, MFA includes `base.html` but it needs blocks named `head` & `content` to added its content to it.\n **Note:** Starting v2.3.0, a new template `mfa_base.html` is introduced, this template is used by `MFA.html` so you can control the styling better and current `mfa_base.html` extends `base.html`\n8. Somewhere in your app, add a link to 'mfa_home'\n```
  • Security
  • ```\n\n\nFor Example, See 'example' app\n\n# Going Passwordless\n\nTo be able to go passwordless for returning users, create a cookie named 'base_username' containing username as shown in snippet below\n```python\n response = render(request, 'Dashboard.html', context))\n if request.session.get(\"mfa\",{}).get(\"verified\",False) and getattr(settings,\"MFA_QUICKLOGIN\",False):\n if request.session[\"mfa\"][\"method\"]!=\"Trusted Device\":\n response.set_cookie(\"base_username\", request.user.username, path=\"/\",max_age = 15*24*60*60)\n return response\n```\n\nSecond, update the GET part of your login view\n```python\n if \"mfa\" in settings.INSTALLED_APPS and getattr(settings,\"MFA_QUICKLOGIN\",False) and request.COOKIES.get('base_username'):\n username=request.COOKIES.get('base_username')\n from mfa.helpers import has_mfa\n res = has_mfa(username = username,request=request,)\n if res: return res\n ## continue and return the form.\n```\n# Checking MFA on Client Side\n\nSometimes you like to verify that the user is still there so simple you can ask django-mfa2 to check that for you\n\n```html\n {% include 'mfa_check.html' %}\n```\n````js\nfunction success_func() {\n //logic if mfa check succeeds\n}\nfunction fail_func() {\n //logic if mfa check fails\n}\nfunction some_func() {\n recheck_mfa(success_func,fail_func,MUST_BE_MFA)\n //MUST_BE_MFA true or false, if the user must has with MFA\n }\n\n````\n\n# Contributors\n* [mahmoodnasr](https://github.com/mahmoodnasr)\n* [d3cline](https://github.com/d3cline)\n* [swainn](https://github.com/swainn)\n* [unramk](https://github.com/unramk)\n* [willingham](https://github.com/willingham)\n* [AndreasDickow](https://github.com/AndreasDickow)\n* [mnelson4](https://github.com/mnelson4)\n\n\n # Security contact information\nTo report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/mkalioby/django-mfa2/", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mkalioby/django-mfa2/", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-mfa2", "package_url": "https://pypi.org/project/django-mfa2/", "platform": "", "project_url": "https://pypi.org/project/django-mfa2/", "project_urls": { "Download": "https://github.com/mkalioby/django-mfa2/", "Homepage": "https://github.com/mkalioby/django-mfa2/" }, "release_url": "https://pypi.org/project/django-mfa2/2.4.0/", "requires_dist": null, "requires_python": ">=3.5", "summary": "Allows user to add 2FA to their accounts", "version": "2.4.0", "yanked": false, "yanked_reason": null }, "last_serial": 11726771, "releases": { "0.8": [ { "comment_text": "", "digests": { "md5": "80c19965d8356f3e625c751dafecab16", "sha256": "6389f89f8e66cc9e99683457bb4e0ee5d391221319cd540aaa27a6b53bac484c" }, "downloads": -1, "filename": "django-mfa2-0.8.tar.gz", "has_sig": false, "md5_digest": "80c19965d8356f3e625c751dafecab16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8761, "upload_time": "2019-01-18T07:28:55", "upload_time_iso_8601": "2019-01-18T07:28:55.344887Z", "url": "https://files.pythonhosted.org/packages/9d/6b/1b70d476c95e9a728b2c6e2588a9700c35981de012803bab32c20a800e75/django-mfa2-0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "331fdd467068f4f15347b18e50c769a8", "sha256": "7a3dd403eb06776ec6249c31d75c8f2357ab8f078ddee3704b92c504b7a11762" }, "downloads": -1, "filename": "django_mfa2-0.8.5-py2.7.egg", "has_sig": false, "md5_digest": "331fdd467068f4f15347b18e50c769a8", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 81755, "upload_time": "2019-01-18T13:10:53", "upload_time_iso_8601": "2019-01-18T13:10:53.711319Z", "url": "https://files.pythonhosted.org/packages/58/a1/fc0547b88e043e31391c64d07ee247786b7166ac3ae5144725ac1e36b241/django_mfa2-0.8.5-py2.7.egg", "yanked": false, "yanked_reason": null } ], "0.8.7": [ { "comment_text": "", "digests": { "md5": "92daa9de53a01aa5cf325db5f38f636a", "sha256": "556879dfb6b02932fbe75ce2f4e60ec12cb4a0e4d4ebdd3c5a1a5f9cdb6f8437" }, "downloads": -1, "filename": "django-mfa2-0.8.7.tar.gz", "has_sig": false, "md5_digest": "92daa9de53a01aa5cf325db5f38f636a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34591, "upload_time": "2019-01-20T12:50:37", "upload_time_iso_8601": "2019-01-20T12:50:37.550774Z", "url": "https://files.pythonhosted.org/packages/e6/b0/44e8c1be19b670c316c67043168b6e6e54ad2674fc7bbe6f330d0cb7fcbf/django-mfa2-0.8.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.8.8": [ { "comment_text": "", "digests": { "md5": "a29db59c3578d992c777540af7bdb417", "sha256": "1d75f43baa5c6ec32f2909a1b36751196df65a211d5234f7e192a1ad428dcf6f" }, "downloads": -1, "filename": "django-mfa2-0.8.8.tar.gz", "has_sig": false, "md5_digest": "a29db59c3578d992c777540af7bdb417", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34596, "upload_time": "2019-01-20T12:52:50", "upload_time_iso_8601": "2019-01-20T12:52:50.674762Z", "url": "https://files.pythonhosted.org/packages/ed/4e/4976beef5e52cbed45f7c04fb2258a1182e35d1b6d1e0f66852d2a27255a/django-mfa2-0.8.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "ba048c0e1e3a58da21543e0afa38a23a", "sha256": "d6fa0b1d8afcaa18f2010a4aca8973bad028e93d8bb4b0786a5cfd59c190e8dd" }, "downloads": -1, "filename": "django-mfa2-0.9.0.tar.gz", "has_sig": false, "md5_digest": "ba048c0e1e3a58da21543e0afa38a23a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36091, "upload_time": "2019-01-21T16:22:01", "upload_time_iso_8601": "2019-01-21T16:22:01.860469Z", "url": "https://files.pythonhosted.org/packages/f7/31/79d2f4c566a5467cfb1214eb3ff77c150d642a2a067810b37d2847b232dd/django-mfa2-0.9.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "99b5c001c70ad6d3a7c6526a8a47e376", "sha256": "0ad382a3b5118944281702e150b1bb1c74e6fa811fae03848b8dccd9cad8cc4e" }, "downloads": -1, "filename": "django-mfa2-0.9.1.tar.gz", "has_sig": false, "md5_digest": "99b5c001c70ad6d3a7c6526a8a47e376", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37893, "upload_time": "2019-01-21T16:29:30", "upload_time_iso_8601": "2019-01-21T16:29:30.691103Z", "url": "https://files.pythonhosted.org/packages/2f/13/87bcf52d4be06116cf41541969f9cf5bbfa9fde485ceb30620e772cf17b4/django-mfa2-0.9.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "09ca7ff829f6a2159c2bbc5fc66755b5", "sha256": "7568a0f57c71f044e367bb36e6f765321a39d9e4672aaabf95fc549975fe7133" }, "downloads": -1, "filename": "django_mfa2-0.9.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "09ca7ff829f6a2159c2bbc5fc66755b5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 57264, "upload_time": "2019-01-23T07:42:52", "upload_time_iso_8601": "2019-01-23T07:42:52.404622Z", "url": "https://files.pythonhosted.org/packages/35/8c/1a67ccad61c0bba1d8e19ba094fe2df79b5f8d9c8fd1f7f86c8b9b0cdb15/django_mfa2-0.9.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "cc55335ac322f129713adf4b326127b1", "sha256": "e02905c51eac2b73e96f759a6fe255f29e0f15c0ccea5c06dd3e01eb603c274c" }, "downloads": -1, "filename": "django-mfa2-0.9.2.tar.gz", "has_sig": false, "md5_digest": "cc55335ac322f129713adf4b326127b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36406, "upload_time": "2019-01-23T07:00:00", "upload_time_iso_8601": "2019-01-23T07:00:00.349084Z", "url": "https://files.pythonhosted.org/packages/e0/e5/840e9ed4d4e6f218011dfb2ef3f43ef80734656fb2d7c68f208a8f8b1270/django-mfa2-0.9.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.9.4": [ { "comment_text": "", "digests": { "md5": "c1782bfd228410658237076571d889c3", "sha256": "333f0b57fc040c7c6e86f7a07c5006f465ea6c304ba9a54761718d8fda6ebf49" }, "downloads": -1, "filename": "django_mfa2-0.9.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c1782bfd228410658237076571d889c3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 58589, "upload_time": "2019-01-23T12:32:52", "upload_time_iso_8601": "2019-01-23T12:32:52.583999Z", "url": "https://files.pythonhosted.org/packages/4f/b0/e1d31cb37082db7760b54624e617a43dcec78b7bf45c8e7a5a04ebea45b5/django_mfa2-0.9.4-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.9.5": [ { "comment_text": "", "digests": { "md5": "f9dd586bad1fae2a5ac8b4f0beef6d85", "sha256": "8a63f74f06f67a6790d5bc1e33f2a0151ef636d61663394aa3b67a8197420854" }, "downloads": -1, "filename": "django-mfa2-0.9.5.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "f9dd586bad1fae2a5ac8b4f0beef6d85", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 51245, "upload_time": "2019-01-23T12:39:29", "upload_time_iso_8601": "2019-01-23T12:39:29.212389Z", "url": "https://files.pythonhosted.org/packages/25/8c/a2abeeea6816165cff388bb0ae657474fbbcbc7db23ea59ebb8a1adc9fa4/django-mfa2-0.9.5.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e2223aaf51ef06e33cdc45a47f223195", "sha256": "c6dfcdd125cbb314236ab377e896df6b6d58c81424490db0757c7055f97e4732" }, "downloads": -1, "filename": "django_mfa2-0.9.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e2223aaf51ef06e33cdc45a47f223195", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 59070, "upload_time": "2019-01-23T12:39:27", "upload_time_iso_8601": "2019-01-23T12:39:27.062223Z", "url": "https://files.pythonhosted.org/packages/7d/27/0a82e5f3c9529bc66729cfdeac34a55ffa642a7c54a29b86f63bda33e96d/django_mfa2-0.9.5-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.0": [ { "comment_text": "", "digests": { "md5": "d65ec4d29aed9db5c4d3227ee870ad8a", "sha256": "84d28d75a1177a58f5f2980fca20605b74ecb86c15b5982c125c4fc723d9f904" }, "downloads": -1, "filename": "django-mfa2-1.0.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "d65ec4d29aed9db5c4d3227ee870ad8a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 51251, "upload_time": "2019-01-23T12:49:47", "upload_time_iso_8601": "2019-01-23T12:49:47.488187Z", "url": "https://files.pythonhosted.org/packages/6a/7d/1d375464711b25656fb0bf1ea0a8423fba134eb0af73ff0cc69101f995e9/django-mfa2-1.0.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b2c1e17b0b29903123db50f779c196e1", "sha256": "0b8dea47d6364220925eca5087bd580beef188e65c39001250e745057f6dfa34" }, "downloads": -1, "filename": "django_mfa2-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b2c1e17b0b29903123db50f779c196e1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 59041, "upload_time": "2019-01-23T12:49:40", "upload_time_iso_8601": "2019-01-23T12:49:40.289481Z", "url": "https://files.pythonhosted.org/packages/f7/96/c77d72c95dad02066617c02717d853963b1d699fbf6377a0b6c08a7066d6/django_mfa2-1.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "20ea74dc2beca2a8d74e8678ae5552b5", "sha256": "bb806f4960d9a1c53c095e5862351721d13b8529e0339c2a6e4666c793a6a25d" }, "downloads": -1, "filename": "django-mfa2-1.0.1.tar.gz", "has_sig": false, "md5_digest": "20ea74dc2beca2a8d74e8678ae5552b5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 36825, "upload_time": "2019-01-23T13:03:57", "upload_time_iso_8601": "2019-01-23T13:03:57.766783Z", "url": "https://files.pythonhosted.org/packages/a4/47/92598dde4678d6f8b393292f4093d0d022bb108aab36b864319946601ef3/django-mfa2-1.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "09ae18b67e4f478cfcaa58c8e942f8ad", "sha256": "dc62d9c410db46d5a776e325147468f014b6325486764cec9ded8a6dcbec0666" }, "downloads": -1, "filename": "django-mfa2-1.0.2.tar.gz", "has_sig": false, "md5_digest": "09ae18b67e4f478cfcaa58c8e942f8ad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 36898, "upload_time": "2019-01-23T13:04:50", "upload_time_iso_8601": "2019-01-23T13:04:50.191410Z", "url": "https://files.pythonhosted.org/packages/9b/ac/5aa472ec4deb4fac6948c200fb9e97d6f96ad31b118e21f82bb6333a0771/django-mfa2-1.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "c156ddde4f6c1000807c9435561ac409", "sha256": "743f924ae553f5b3720aead5fb94d8711cf8ba823b10311b59563b9cd17eb798" }, "downloads": -1, "filename": "django-mfa2-1.0.3.tar.gz", "has_sig": false, "md5_digest": "c156ddde4f6c1000807c9435561ac409", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 36901, "upload_time": "2019-01-23T13:13:59", "upload_time_iso_8601": "2019-01-23T13:13:59.620254Z", "url": "https://files.pythonhosted.org/packages/8a/c9/bcd437f416d098abe0bc4fdf43be0f5c41ea05dda294410ce50feadaed49/django-mfa2-1.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "d6a364e2a68a77d676b7b3b94898d623", "sha256": "075012561c0fa69fe9da8f164f600f72e8c0c6fb4f17d286932ff053edca4620" }, "downloads": -1, "filename": "django-mfa2-1.0.4.tar.gz", "has_sig": false, "md5_digest": "d6a364e2a68a77d676b7b3b94898d623", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 37021, "upload_time": "2019-01-23T13:14:35", "upload_time_iso_8601": "2019-01-23T13:14:35.679038Z", "url": "https://files.pythonhosted.org/packages/b8/e9/e160534d89d55108fe44d6e24d85f921acb41f892e7867e02ee2ab701b3b/django-mfa2-1.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "85417deedaab823ce1a82d9701df07f4", "sha256": "90c9101ad80d34ac587e0cf13ff4d669f793b0c943fbb6a92acce71785a95f38" }, "downloads": -1, "filename": "django-mfa2-1.0.5.tar.gz", "has_sig": false, "md5_digest": "85417deedaab823ce1a82d9701df07f4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 37084, "upload_time": "2019-03-11T10:05:14", "upload_time_iso_8601": "2019-03-11T10:05:14.932397Z", "url": "https://files.pythonhosted.org/packages/20/c2/788b6ff44aa51ca5e024661c372a802c262e72e41f2b302e77ad330154d6/django-mfa2-1.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1": [ { "comment_text": "", "digests": { "md5": "8823661f3aa268db3c4459b2dc54eb37", "sha256": "0321dab08bc719c785ddef96c3bc66b58b762578d6857bdb6927a63376fa849a" }, "downloads": -1, "filename": "django_mfa2-1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8823661f3aa268db3c4459b2dc54eb37", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 70830, "upload_time": "2019-01-25T12:11:17", "upload_time_iso_8601": "2019-01-25T12:11:17.483433Z", "url": "https://files.pythonhosted.org/packages/92/fa/e8e391cef069304ebe63fdb981f9c4032ed25b8aa8bd28a740cbed30b1e4/django_mfa2-1.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "73282e756762fc737f62aa54ef205936", "sha256": "77350945b45dda2633762e3ef3d26bb335f74452170a48a74ebefb9087ce61b1" }, "downloads": -1, "filename": "django-mfa2-1.1.tar.gz", "has_sig": false, "md5_digest": "73282e756762fc737f62aa54ef205936", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 39653, "upload_time": "2019-01-25T12:15:33", "upload_time_iso_8601": "2019-01-25T12:15:33.063112Z", "url": "https://files.pythonhosted.org/packages/cc/a9/b3dfce9126469d40ecfb51f66e63e7e69bf76e93ecd9356839d1676170dc/django-mfa2-1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "b6f49edbf1fcc57338557340ad5e9bbc", "sha256": "9393f6955ba22229828fa3455c4625a2c8fc2f80acade6d847b518f93540b523" }, "downloads": -1, "filename": "django-mfa2-1.1.1.tar.gz", "has_sig": false, "md5_digest": "b6f49edbf1fcc57338557340ad5e9bbc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 39648, "upload_time": "2019-01-25T12:18:18", "upload_time_iso_8601": "2019-01-25T12:18:18.954980Z", "url": "https://files.pythonhosted.org/packages/80/d2/1ac476f73fb6edb9971af750b7ed49edf78902ac2e64719226f36604d572/django-mfa2-1.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "4c42c72ed0c878c7d3c4f18d04071d6c", "sha256": "93556369a277411d521efa2fa209c99335c4010bb3ad763aebb5aa39dfb98e7e" }, "downloads": -1, "filename": "django-mfa2-1.1.2.tar.gz", "has_sig": false, "md5_digest": "4c42c72ed0c878c7d3c4f18d04071d6c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 37277, "upload_time": "2019-03-11T10:08:30", "upload_time_iso_8601": "2019-03-11T10:08:30.326737Z", "url": "https://files.pythonhosted.org/packages/8d/e3/f8d0513dd30eeeed05c44472cf08b39a463f3f3cbd50129a2a404a1ee7fb/django-mfa2-1.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.5": [ { "comment_text": "", "digests": { "md5": "6dabf4c2a03c59c045e61cd5debc79ba", "sha256": "2638f3c20d60f8c1e64b98f7e40992371e8207861f94d0a26e91c347fc0fb3bd" }, "downloads": -1, "filename": "django-mfa2-1.1.5.tar.gz", "has_sig": false, "md5_digest": "6dabf4c2a03c59c045e61cd5debc79ba", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 37904, "upload_time": "2019-03-19T09:56:47", "upload_time_iso_8601": "2019-03-19T09:56:47.904144Z", "url": "https://files.pythonhosted.org/packages/0b/6c/2440906ce5205df32c08c8b5fe9fc754a2f68156bb8d8a3ed8abd00cf7c3/django-mfa2-1.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.6": [ { "comment_text": "", "digests": { "md5": "505684b6cde4c5adb31e2635f854bc4f", "sha256": "6d4577cd6525e05da6b97708a53c285ecc1afe234b199939f4e254bab6797295" }, "downloads": -1, "filename": "django-mfa2-1.1.6.tar.gz", "has_sig": false, "md5_digest": "505684b6cde4c5adb31e2635f854bc4f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 37958, "upload_time": "2019-03-24T13:31:11", "upload_time_iso_8601": "2019-03-24T13:31:11.420621Z", "url": "https://files.pythonhosted.org/packages/2b/aa/fe8ef837fd258e32c8df500c98a23072e60f09da905230e2f0c7ef1cb1dd/django-mfa2-1.1.6.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.7": [ { "comment_text": "", "digests": { "md5": "e2ae03087cfff2703ea67f4d246d773a", "sha256": "daa8f4e1b1a744484b8884b9b54013b6bc094cdcdc0914c752897097cc438e33" }, "downloads": -1, "filename": "django-mfa2-1.1.7.tar.gz", "has_sig": false, "md5_digest": "e2ae03087cfff2703ea67f4d246d773a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 37954, "upload_time": "2019-04-23T08:58:05", "upload_time_iso_8601": "2019-04-23T08:58:05.419635Z", "url": "https://files.pythonhosted.org/packages/b1/b3/6ec73641be59371cf294a3bdb0f29b8495fc496b3d0b628ead315df58fb8/django-mfa2-1.1.7.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.8": [ { "comment_text": "", "digests": { "md5": "0fa112e30dfb25ac90c2ea22ce42ceed", "sha256": "097c2e8ee3e7a9acb44ef00d44ad3f62e6dfd39f16ef47a4095fb6ae28e0013e" }, "downloads": -1, "filename": "django-mfa2-1.1.8.tar.gz", "has_sig": false, "md5_digest": "0fa112e30dfb25ac90c2ea22ce42ceed", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 37964, "upload_time": "2019-04-23T09:01:59", "upload_time_iso_8601": "2019-04-23T09:01:59.170284Z", "url": "https://files.pythonhosted.org/packages/c8/85/7fa6e3e9003cfdc33ae1a55e6007a0dc0ee4adb6a83b0f3248bc90a91666/django-mfa2-1.1.8.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.8.1": [ { "comment_text": "", "digests": { "md5": "dcf3a0c7b0860a499f2442f35151da06", "sha256": "a410ca0c9ec8f0a42fa84bead00c025523c25205396f5958dd49277e2a8c6d78" }, "downloads": -1, "filename": "django-mfa2-1.1.8.1.tar.gz", "has_sig": false, "md5_digest": "dcf3a0c7b0860a499f2442f35151da06", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 37988, "upload_time": "2019-04-23T10:39:20", "upload_time_iso_8601": "2019-04-23T10:39:20.122506Z", "url": "https://files.pythonhosted.org/packages/d8/0a/0f8ef6e630944bb8350b27127bd867319a21158a26bf4bee1bd801a40d03/django-mfa2-1.1.8.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "4d48a532918e9fa261a67e1b9691146b", "sha256": "f8435be40e4ca667edb25d7fcf373fd1cc3273077b6f9272fe973466bfe8d8e2" }, "downloads": -1, "filename": "django-mfa2-1.2.0.tar.gz", "has_sig": false, "md5_digest": "4d48a532918e9fa261a67e1b9691146b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 38131, "upload_time": "2019-05-19T13:09:27", "upload_time_iso_8601": "2019-05-19T13:09:27.525195Z", "url": "https://files.pythonhosted.org/packages/f0/b3/07d34a3c2da229486569e9009730e7c8b463bdd18106f0e93b0dbe1ec718/django-mfa2-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "ad61a18b06e85530a3095718a8852f37", "sha256": "fa8e5fb47662f5462ea47b0682061a06758c07bbfcbde4298dfce4a98dd93ab6" }, "downloads": -1, "filename": "django-mfa2-1.2.1.tar.gz", "has_sig": false, "md5_digest": "ad61a18b06e85530a3095718a8852f37", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 38159, "upload_time": "2019-05-19T13:19:48", "upload_time_iso_8601": "2019-05-19T13:19:48.601018Z", "url": "https://files.pythonhosted.org/packages/5e/99/9889c826efba32a0e4c0c3c8e470ed7d395fccdec240007f68ca093259cc/django-mfa2-1.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "8ab295bb1031dbd3c3839b2e8338952e", "sha256": "2e600739f157d66c4d26a159e93bc9a6b48f7aed4f8a9724aa006cbdf90f40cc" }, "downloads": -1, "filename": "django-mfa2-1.3.0.tar.gz", "has_sig": false, "md5_digest": "8ab295bb1031dbd3c3839b2e8338952e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 38214, "upload_time": "2019-05-29T10:30:14", "upload_time_iso_8601": "2019-05-29T10:30:14.009306Z", "url": "https://files.pythonhosted.org/packages/c9/73/25d485c8b4b656c6705bac294071cf180a8eb479a265f36c8d7e6029259b/django-mfa2-1.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "acb86cb7f31d960959a327e2690ee847", "sha256": "6c5a7866411e5d58e0801fb8ff25910398f404a2aae93933ec4c92f7669e72f7" }, "downloads": -1, "filename": "django-mfa2-1.4.0.tar.gz", "has_sig": false, "md5_digest": "acb86cb7f31d960959a327e2690ee847", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 38355, "upload_time": "2019-06-17T13:29:30", "upload_time_iso_8601": "2019-06-17T13:29:30.307168Z", "url": "https://files.pythonhosted.org/packages/ec/cd/5656f355c17a255396a9a9a90afd1d66ac0612bafc730472a2ef21b434e7/django-mfa2-1.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "785c6aafaf4d12451b246bfcdf8bb79a", "sha256": "cdbbbc957237380e8999ece0a36239ece8f8fd4f67a891fb59430cd042b9e77b" }, "downloads": -1, "filename": "django-mfa2-1.4.1.tar.gz", "has_sig": false, "md5_digest": "785c6aafaf4d12451b246bfcdf8bb79a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 38330, "upload_time": "2019-06-19T11:03:47", "upload_time_iso_8601": "2019-06-19T11:03:47.131088Z", "url": "https://files.pythonhosted.org/packages/bc/52/fa49cfc69d99677d80f376f9919cb2e414542776e552756c2aa986151726/django-mfa2-1.4.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "c36246e97fea987e1638949fd8827ff6", "sha256": "f7493d17bac290b7664b82ee6b4deb97d339db36af124a34f267556c79519af4" }, "downloads": -1, "filename": "django-mfa2-1.5.0.tar.gz", "has_sig": false, "md5_digest": "c36246e97fea987e1638949fd8827ff6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 38367, "upload_time": "2019-06-20T13:04:55", "upload_time_iso_8601": "2019-06-20T13:04:55.391744Z", "url": "https://files.pythonhosted.org/packages/83/42/cda6d47239630f371df4771c1485c3d8497e8a1ff403e2900a62d1cd3c73/django-mfa2-1.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.6": [ { "comment_text": "", "digests": { "md5": "995d1d5b4fed08e702e9de175a9ed6a7", "sha256": "c31d6c55c4c4d36b8658cf6d76262c3c101884d5830b834037820465baedaebf" }, "downloads": -1, "filename": "django-mfa2-1.6.tar.gz", "has_sig": false, "md5_digest": "995d1d5b4fed08e702e9de175a9ed6a7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 41487, "upload_time": "2019-06-20T18:19:13", "upload_time_iso_8601": "2019-06-20T18:19:13.852904Z", "url": "https://files.pythonhosted.org/packages/55/5f/739959908089d846c3e016d21e0c04b2059008030e12912fa08f21e2c15c/django-mfa2-1.6.tar.gz", "yanked": false, "yanked_reason": null } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "2d590bba3ddae70fcd6051639b5730d5", "sha256": "494442ca5b83441888876f20518126d48c5536d4a6c1365d81d168b2b62fff28" }, "downloads": -1, "filename": "django-mfa2-1.7.0.tar.gz", "has_sig": false, "md5_digest": "2d590bba3ddae70fcd6051639b5730d5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 38552, "upload_time": "2019-10-16T11:43:08", "upload_time_iso_8601": "2019-10-16T11:43:08.666704Z", "url": "https://files.pythonhosted.org/packages/10/20/d466a25c03217abbbbfd719857dad72246ddf6f4f6bcd9a5ecd39689507b/django-mfa2-1.7.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.7.10": [ { "comment_text": "", "digests": { "md5": "5e2d69d3fca1db20810a5c03016fbac2", "sha256": "f9691c14f10a4f6f6da9e83de74b7e6d8da9ed19dc7e5b246dc7838c8680877b" }, "downloads": -1, "filename": "django-mfa2-1.7.10.tar.gz", "has_sig": false, "md5_digest": "5e2d69d3fca1db20810a5c03016fbac2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 42228, "upload_time": "2019-10-18T12:55:09", "upload_time_iso_8601": "2019-10-18T12:55:09.126363Z", "url": "https://files.pythonhosted.org/packages/1b/3e/105fccdc4f73ac392c7433ca7ce1fa45ed0a206e7036678913d985bb9f0e/django-mfa2-1.7.10.tar.gz", "yanked": false, "yanked_reason": null } ], "1.7.11": [ { "comment_text": "", "digests": { "md5": "57a21e8f82037ff488da7b41f8eba3e7", "sha256": "b18532fb38ad061a6a006f9cde8ff35cbcc8ee7a60c33f5c5963eaf079a36255" }, "downloads": -1, "filename": "django-mfa2-1.7.11.tar.gz", "has_sig": false, "md5_digest": "57a21e8f82037ff488da7b41f8eba3e7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 42248, "upload_time": "2019-10-18T13:03:12", "upload_time_iso_8601": "2019-10-18T13:03:12.376409Z", "url": "https://files.pythonhosted.org/packages/0d/90/b9d88b7643e81107dbe472e6799a5d15144f98047e6e9c5de63bf014f342/django-mfa2-1.7.11.tar.gz", "yanked": false, "yanked_reason": null } ], "1.7.12": [ { "comment_text": "", "digests": { "md5": "ebde13457eb14047cf3ace8e00387322", "sha256": "dbf2520234b0cff3e3bddef220a07d207809ec10fdf3da77013c8da39cc8fc43" }, "downloads": -1, "filename": "django-mfa2-1.7.12.tar.gz", "has_sig": false, "md5_digest": "ebde13457eb14047cf3ace8e00387322", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 42248, "upload_time": "2019-10-20T12:59:03", "upload_time_iso_8601": "2019-10-20T12:59:03.110243Z", "url": "https://files.pythonhosted.org/packages/0f/df/c2c86736f750e9ea3a1a3719d2dd55da433fe0330f947a13a9282541a8b8/django-mfa2-1.7.12.tar.gz", "yanked": false, "yanked_reason": null } ], "1.7.13": [ { "comment_text": "", "digests": { "md5": "a86081e248d3af7a0b90c10f9d13a3f4", "sha256": "c260cb388c368b8dde55bdf5126be35cbc3511283be17efb573c063205aedd56" }, "downloads": -1, "filename": "django-mfa2-1.7.13.tar.gz", "has_sig": false, "md5_digest": "a86081e248d3af7a0b90c10f9d13a3f4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 42255, "upload_time": "2019-10-21T08:20:29", "upload_time_iso_8601": "2019-10-21T08:20:29.718781Z", "url": "https://files.pythonhosted.org/packages/9a/05/0699b26dde6cc553f699f66aaefc1ed049ccc510956d9397874ad54dd59b/django-mfa2-1.7.13.tar.gz", "yanked": false, "yanked_reason": null } ], "1.7.5": [ { "comment_text": "", "digests": { "md5": "ae486fe365779e2f4489b234034b2c8e", "sha256": "553690956d425b49e7ce405d6631a9d65917958556668fbeae67f61d70b14e8b" }, "downloads": -1, "filename": "django-mfa2-1.7.5.tar.gz", "has_sig": false, "md5_digest": "ae486fe365779e2f4489b234034b2c8e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 38636, "upload_time": "2019-10-16T15:50:00", "upload_time_iso_8601": "2019-10-16T15:50:00.434778Z", "url": "https://files.pythonhosted.org/packages/5c/69/2d8fff763074ae92a23fb5f5cf85cac894ff440233b4b3ace82665787cf1/django-mfa2-1.7.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.7.6": [ { "comment_text": "", "digests": { "md5": "8837cc26bdb8c4d998cb023ba127275f", "sha256": "ac0527979685b184be3b8b20a5bd3de5fc49c99a7ea43dbcd5cdbc7e6bba4ff6" }, "downloads": -1, "filename": "django-mfa2-1.7.6.tar.gz", "has_sig": false, "md5_digest": "8837cc26bdb8c4d998cb023ba127275f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 42176, "upload_time": "2019-10-18T11:32:05", "upload_time_iso_8601": "2019-10-18T11:32:05.827529Z", "url": "https://files.pythonhosted.org/packages/8b/07/244ace190303e290578213124bc0c669dde2dcc5c1bd34d1c1ea56342488/django-mfa2-1.7.6.tar.gz", "yanked": false, "yanked_reason": null } ], "1.7.7": [ { "comment_text": "", "digests": { "md5": "ed32b752a6ccafa69367ed0b7412e208", "sha256": "592f1b200bbe311a2772fe29940b3f5fba0d3f7e6115bae0789938fb9c026875" }, "downloads": -1, "filename": "django-mfa2-1.7.7.tar.gz", "has_sig": false, "md5_digest": "ed32b752a6ccafa69367ed0b7412e208", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 42183, "upload_time": "2019-10-18T11:40:27", "upload_time_iso_8601": "2019-10-18T11:40:27.202861Z", "url": "https://files.pythonhosted.org/packages/8a/e2/133c8dbf50e517135132691f0b689c068bbdb9a6bd059933b58f8d736df3/django-mfa2-1.7.7.tar.gz", "yanked": false, "yanked_reason": null } ], "1.7.8": [ { "comment_text": "", "digests": { "md5": "f5cf2866c3fcf09f4cc82297382e840a", "sha256": "3e3523e51766fcce11ca373846f40d8cf9df16785ca6fccaed781dacb5d709b0" }, "downloads": -1, "filename": "django-mfa2-1.7.8.tar.gz", "has_sig": false, "md5_digest": "f5cf2866c3fcf09f4cc82297382e840a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 42195, "upload_time": "2019-10-18T12:05:55", "upload_time_iso_8601": "2019-10-18T12:05:55.795585Z", "url": "https://files.pythonhosted.org/packages/b8/47/a93b16b15293142979517f3048fb2ccfc9114eac06712922337e38577dad/django-mfa2-1.7.8.tar.gz", "yanked": false, "yanked_reason": null } ], "1.7.9": [ { "comment_text": "", "digests": { "md5": "bfcddee6e34d6463ddc7050c22dede07", "sha256": "f1b4e00f27e5f20231fe9d57d6dd99b5c2cbe648734090bb0be9257272a81e57" }, "downloads": -1, "filename": "django-mfa2-1.7.9.tar.gz", "has_sig": false, "md5_digest": "bfcddee6e34d6463ddc7050c22dede07", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 42204, "upload_time": "2019-10-18T12:21:56", "upload_time_iso_8601": "2019-10-18T12:21:56.718235Z", "url": "https://files.pythonhosted.org/packages/65/56/1f084adcb2848cc620f985b9cb3211894e27392fa7553959871e98d4bc50/django-mfa2-1.7.9.tar.gz", "yanked": false, "yanked_reason": null } ], "1.8.0": [ { "comment_text": "", "digests": { "md5": "ea0fe53a2feb39a4388479bfaee64a14", "sha256": "54081f4174d121b1444e9088fc729b8906f74953348b9c0af529f298c1c9e5ac" }, "downloads": -1, "filename": "django-mfa2-1.8.0.tar.gz", "has_sig": false, "md5_digest": "ea0fe53a2feb39a4388479bfaee64a14", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 42252, "upload_time": "2019-10-27T06:42:38", "upload_time_iso_8601": "2019-10-27T06:42:38.127384Z", "url": "https://files.pythonhosted.org/packages/54/f5/afe47214e328193918fa9a521a49e45ecbdce4a8fa82c728f0fee31948d7/django-mfa2-1.8.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.8.1": [ { "comment_text": "", "digests": { "md5": "7f5461ae5867ed01500080cdec9ae8c0", "sha256": "e263b84b3356a2bc77510742a4c844f8ba6652bc5886f7e6a2353a74d2754264" }, "downloads": -1, "filename": "django-mfa2-1.8.1.tar.gz", "has_sig": false, "md5_digest": "7f5461ae5867ed01500080cdec9ae8c0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 39430, "upload_time": "2020-06-03T17:06:05", "upload_time_iso_8601": "2020-06-03T17:06:05.231609Z", "url": "https://files.pythonhosted.org/packages/8b/e0/13cfacc61e75cb3ddcfec102326c36d3ace869bda151a9a25580b9332a5e/django-mfa2-1.8.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.9.0": [ { "comment_text": "", "digests": { "md5": "18172304e0cffed720a996323edf3286", "sha256": "e49b37182b99a448ae11313be1d7877209748a2b5b6ef2d34c078a7b11f2b6c8" }, "downloads": -1, "filename": "django-mfa2-1.9.0.tar.gz", "has_sig": false, "md5_digest": "18172304e0cffed720a996323edf3286", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", "size": 42421, "upload_time": "2020-06-06T08:09:47", "upload_time_iso_8601": "2020-06-06T08:09:47.972617Z", "url": "https://files.pythonhosted.org/packages/68/59/e0e7c3611fed3e43b17216967b7a28b6b9a9a5e582f70a931f131c5d519c/django-mfa2-1.9.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "3d1495454ad6e1031f07af05f28793f2", "sha256": "854621e76024ea4e5b965016c76c779c9242925e0a6d1d4c032c37dc7bfd3067" }, "downloads": -1, "filename": "django-mfa2-2.0.0.tar.gz", "has_sig": false, "md5_digest": "3d1495454ad6e1031f07af05f28793f2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 42694, "upload_time": "2020-09-09T16:02:45", "upload_time_iso_8601": "2020-09-09T16:02:45.196510Z", "url": "https://files.pythonhosted.org/packages/46/0b/a27ff44fac9375af587490ef9e1844e6e7adea314cd133b502dce94625fd/django-mfa2-2.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "b6f125d5af368d6f739ae8e29db0067f", "sha256": "ab6348347b494635e0a06d5c5ea33a224e5b1786147a4fcd6ba3c8c8fc3c4644" }, "downloads": -1, "filename": "django-mfa2-2.0.1.tar.gz", "has_sig": false, "md5_digest": "b6f125d5af368d6f739ae8e29db0067f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 42698, "upload_time": "2020-09-10T06:09:16", "upload_time_iso_8601": "2020-09-10T06:09:16.136933Z", "url": "https://files.pythonhosted.org/packages/0a/2f/382882ee32dbfbf5fa7ca9dd46bdcbbf5890e802a27aa20c52dd5052fe6d/django-mfa2-2.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "b974699e7e30332a47f77d8287908d5e", "sha256": "9af5c9df761bf0576fae5a2217d2ce1cfe793c70582726755ca6c46083fe59cc" }, "downloads": -1, "filename": "django-mfa2-2.0.2.tar.gz", "has_sig": false, "md5_digest": "b974699e7e30332a47f77d8287908d5e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 42844, "upload_time": "2020-11-10T05:59:15", "upload_time_iso_8601": "2020-11-10T05:59:15.956545Z", "url": "https://files.pythonhosted.org/packages/84/a7/972df4e7a0eda7c4f5c1e569c601f65a9608b38f7b947c2e27bb20b56144/django-mfa2-2.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "1fe3a6f65ed250afe7535790746ed62d", "sha256": "5ebd6dddfd91d974ae55faf086dd0e02f92ef13c9192b25c47b15869bda47bbd" }, "downloads": -1, "filename": "django-mfa2-2.0.3.tar.gz", "has_sig": false, "md5_digest": "1fe3a6f65ed250afe7535790746ed62d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 42837, "upload_time": "2020-11-10T06:03:35", "upload_time_iso_8601": "2020-11-10T06:03:35.634626Z", "url": "https://files.pythonhosted.org/packages/4e/c7/270120e76c88a701bbc2cc4328d9e2c2d2bf2e828092bb0be5d0b83b0681/django-mfa2-2.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "2.0.4": [ { "comment_text": "", "digests": { "md5": "b4a35361b032624b226ca4010d65cc16", "sha256": "cd51817dd9bd66c8c2e75f012228c8ed7897cbece91cee2ebe11052a23f08cc0" }, "downloads": -1, "filename": "django-mfa2-2.0.4.tar.gz", "has_sig": false, "md5_digest": "b4a35361b032624b226ca4010d65cc16", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 42819, "upload_time": "2020-12-08T14:32:02", "upload_time_iso_8601": "2020-12-08T14:32:02.337580Z", "url": "https://files.pythonhosted.org/packages/88/99/de1c91fe47d86f8e5a0a09880fc2a43ad172efedd2824eb7b60427d302f7/django-mfa2-2.0.4.tar.gz", "yanked": true, "yanked_reason": "Wrong __version__" } ], "2.0.5": [ { "comment_text": "", "digests": { "md5": "4c4814d0ceeb0e5b6f30e403becdf989", "sha256": "6231d8bd06603bcc4761a0a4e0fdf596662b86d276d68be2bdcfbe33fd7e1c6d" }, "downloads": -1, "filename": "django-mfa2-2.0.5.tar.gz", "has_sig": false, "md5_digest": "4c4814d0ceeb0e5b6f30e403becdf989", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 42826, "upload_time": "2020-12-08T14:37:57", "upload_time_iso_8601": "2020-12-08T14:37:57.331633Z", "url": "https://files.pythonhosted.org/packages/21/fa/c18d61c45620efdf290fa7996f76e0f92f92d141352c26211e247015bd14/django-mfa2-2.0.5.tar.gz", "yanked": true, "yanked_reason": "has a major bug" } ], "2.0.6": [ { "comment_text": "", "digests": { "md5": "a6f44ccc2d6bad17966119a7508e4113", "sha256": "f55028c255e4c6759cc98726fb9432ff30ad24de35555e1bcfbc2cfa269415bc" }, "downloads": -1, "filename": "django-mfa2-2.0.6.tar.gz", "has_sig": false, "md5_digest": "a6f44ccc2d6bad17966119a7508e4113", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 43714, "upload_time": "2020-12-09T05:33:02", "upload_time_iso_8601": "2020-12-09T05:33:02.834528Z", "url": "https://files.pythonhosted.org/packages/01/84/423bd07b8c8a7f548499e1bd9af7123b28d139e6c2b56c1b26a9ed779cfe/django-mfa2-2.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "431d273f8fc0980c75fd8a00f129d93e", "sha256": "2d430b56e009a14842d77b2d328d3b77a0f5bbf2d42f15bcb6095d1dd43c0773" }, "downloads": -1, "filename": "django-mfa2-2.1.0.tar.gz", "has_sig": false, "md5_digest": "431d273f8fc0980c75fd8a00f129d93e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 49867, "upload_time": "2021-01-20T14:09:51", "upload_time_iso_8601": "2021-01-20T14:09:51.200979Z", "url": "https://files.pythonhosted.org/packages/8c/21/a9f7c5253b4e128899812481bd6c7b3bd7ba0e8b3f8b8ca464ff24b42f23/django-mfa2-2.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.2": [ { "comment_text": "", "digests": { "md5": "5002ad13c67d6687e88198cad9a5ba78", "sha256": "f13be96323ddb3521ccf77ff792a5c88bce2ae223e09417b55f1e37849b192bb" }, "downloads": -1, "filename": "django-mfa2-2.1.2.tar.gz", "has_sig": false, "md5_digest": "5002ad13c67d6687e88198cad9a5ba78", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 49959, "upload_time": "2021-03-02T16:43:53", "upload_time_iso_8601": "2021-03-02T16:43:53.108724Z", "url": "https://files.pythonhosted.org/packages/fb/56/6f45ae4d6513d324c3f01e41543d09698b782211bc55b66c263a1d3b780d/django-mfa2-2.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.1.2b1": [ { "comment_text": "", "digests": { "md5": "057fe35dd0fb3c33081e8ed96eac7bba", "sha256": "fc41a6738a956f9899268493c003e880e30ed0f66b6845ca42c3693193ee13e3" }, "downloads": -1, "filename": "django-mfa2-2.1.2b1.tar.gz", "has_sig": false, "md5_digest": "057fe35dd0fb3c33081e8ed96eac7bba", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 50780, "upload_time": "2021-02-26T10:56:40", "upload_time_iso_8601": "2021-02-26T10:56:40.767981Z", "url": "https://files.pythonhosted.org/packages/23/84/b2b38624671b7908e9a5ee682af44d4e428abaa047698a7d516b76b13a9e/django-mfa2-2.1.2b1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "a74b22156f8b3416bdea87ee5aa09d2c", "sha256": "8ac8fc1b6d92277db047fd85a525ad17d505e8e15248d9c7307a8e096a0bc385" }, "downloads": -1, "filename": "django-mfa2-2.2.0.tar.gz", "has_sig": false, "md5_digest": "a74b22156f8b3416bdea87ee5aa09d2c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 47893, "upload_time": "2021-05-30T06:28:16", "upload_time_iso_8601": "2021-05-30T06:28:16.452916Z", "url": "https://files.pythonhosted.org/packages/3a/df/29570b6ba31dd4da40aa143ce548527c715528567817ac0342a1cafe7319/django-mfa2-2.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.2.0b1": [ { "comment_text": "", "digests": { "md5": "de00ee1a702b76c566706cf428c63501", "sha256": "0cccdd406f4a83284d1f495b11d7c9c0ae7db10d88ae8077552b21b31b4c4c0f" }, "downloads": -1, "filename": "django-mfa2-2.2.0b1.tar.gz", "has_sig": false, "md5_digest": "de00ee1a702b76c566706cf428c63501", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 47380, "upload_time": "2021-03-04T21:49:12", "upload_time_iso_8601": "2021-03-04T21:49:12.757921Z", "url": "https://files.pythonhosted.org/packages/09/b0/05b9e6ed0a7092b2ea8d26fe21fe7ebdbe9fb18d1213d450e71cd399d132/django-mfa2-2.2.0b1.tar.gz", "yanked": false, "yanked_reason": null } ], "2.2.0b2": [ { "comment_text": "", "digests": { "md5": "61d8215c2a2a1314f7c49958ca013da7", "sha256": "00a17f50b310d33df9794f9af158a306a8e05beae19531658622aa7e17644b1d" }, "downloads": -1, "filename": "django-mfa2-2.2.0b2.tar.gz", "has_sig": false, "md5_digest": "61d8215c2a2a1314f7c49958ca013da7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 50616, "upload_time": "2021-05-28T13:46:31", "upload_time_iso_8601": "2021-05-28T13:46:31.687898Z", "url": "https://files.pythonhosted.org/packages/d8/78/ea368d1f20e89494399dde1426776b5c5d1fe711a0be24f67fb7bb0111a2/django-mfa2-2.2.0b2.tar.gz", "yanked": false, "yanked_reason": null } ], "2.3.0": [ { "comment_text": "", "digests": { "md5": "b16cc5d5d4b221a5acfc06f4778319eb", "sha256": "b9929f8578309aa1a0c6a27564388935f2388863c1192283253fc767829f0b08" }, "downloads": -1, "filename": "django-mfa2-2.3.0.tar.gz", "has_sig": false, "md5_digest": "b16cc5d5d4b221a5acfc06f4778319eb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 51663, "upload_time": "2021-09-21T17:24:43", "upload_time_iso_8601": "2021-09-21T17:24:43.078786Z", "url": "https://files.pythonhosted.org/packages/eb/27/1f8e05d69f46ad911a7a8a5b962df0ba550b64e826b6e766214644637037/django-mfa2-2.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "2.4.0": [ { "comment_text": "", "digests": { "md5": "d5fe4e832b2bc3b41e6d5a80f75f42b5", "sha256": "a07c3070d39d7fe32671b4b32dfee43e4ea4f161d55ef9b2a227ed53aa7b4417" }, "downloads": -1, "filename": "django-mfa2-2.4.0.tar.gz", "has_sig": false, "md5_digest": "d5fe4e832b2bc3b41e6d5a80f75f42b5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 48070, "upload_time": "2021-10-14T16:59:00", "upload_time_iso_8601": "2021-10-14T16:59:00.717655Z", "url": "https://files.pythonhosted.org/packages/fe/51/c05ee1454caa49c9cac0f65f3155c881e757ce617741d27cb766b6391423/django-mfa2-2.4.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d5fe4e832b2bc3b41e6d5a80f75f42b5", "sha256": "a07c3070d39d7fe32671b4b32dfee43e4ea4f161d55ef9b2a227ed53aa7b4417" }, "downloads": -1, "filename": "django-mfa2-2.4.0.tar.gz", "has_sig": false, "md5_digest": "d5fe4e832b2bc3b41e6d5a80f75f42b5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 48070, "upload_time": "2021-10-14T16:59:00", "upload_time_iso_8601": "2021-10-14T16:59:00.717655Z", "url": "https://files.pythonhosted.org/packages/fe/51/c05ee1454caa49c9cac0f65f3155c881e757ce617741d27cb766b6391423/django-mfa2-2.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }