{% translate 'Hardware Key Setup' %}
++
diff --git a/.gitignore b/.gitignore index e996682..3a7bc4a 100644 --- a/.gitignore +++ b/.gitignore @@ -284,4 +284,6 @@ fabric.properties # Test blog posts /markdownblog/mdfiles/* /envvars.env -/markdownblog/static \ No newline at end of file +/markdownblog/static + +/*.pem \ No newline at end of file diff --git a/markdownblog/blog/views.py b/markdownblog/blog/views.py index 27ac043..c967c01 100644 --- a/markdownblog/blog/views.py +++ b/markdownblog/blog/views.py @@ -10,6 +10,7 @@ from django.shortcuts import render, redirect from blog.models import Topic, Tag, Blogpost from django.template import Template, Context from django.views.decorators.csrf import csrf_exempt +from django_2fa.decorators import mfa_login_required def render_md_file(path) -> Template: @@ -53,6 +54,7 @@ def index(request) -> HttpResponse: @login_required +@mfa_login_required def edit(request, id) -> HttpResponse: blogpost = Blogpost.objects.get(pk=id) mdfile_content = open(blogpost.mdfile, "r").read() @@ -94,6 +96,7 @@ def edit(request, id) -> HttpResponse: @login_required @csrf_exempt +@mfa_login_required def order(request) -> HttpResponse: if request.method == "POST": root_id = int(request.POST['rootID']) if request.POST['rootID'] != 'root_list' else None @@ -114,6 +117,7 @@ def order(request) -> HttpResponse: @login_required +@mfa_login_required def addpost(request) -> HttpResponse: context = {'alltopics': Topic.objects.all().order_by('name').values(), 'markdown': '', 'roottopics': Topic.objects.all().filter(rootTopic=None), @@ -154,6 +158,7 @@ def addpost(request) -> HttpResponse: # @login_required +# @mfa_login_required # def createmocks(request, objtype, n) -> HttpResponse: # topics = TopicFactory.create_batch(n) # @@ -171,6 +176,7 @@ def addpost(request) -> HttpResponse: @login_required +@mfa_login_required def addtopic(request): context = {'roottopics': Topic.objects.all().filter(rootTopic=None), 'allposts': Blogpost.objects.all()} diff --git a/markdownblog/markdownblog/settings.py b/markdownblog/markdownblog/settings.py index 084b2cb..054a83d 100644 --- a/markdownblog/markdownblog/settings.py +++ b/markdownblog/markdownblog/settings.py @@ -32,6 +32,7 @@ INSTALLED_APPS = [ 'blog', 'markdownblog', 'fontawesomefree', + 'django_2fa', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -48,6 +49,7 @@ MIDDLEWARE = [ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'django_2fa.middleware.MFAProctectMiddleware', ] ROOT_URLCONF = 'markdownblog.urls' @@ -128,7 +130,19 @@ STATIC_URL = 'static/' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' +LOGIN_URL = '/accounts/login' + LOGIN_REDIRECT_URL = "/" LOGOUT_REDIRECT_URL = "/" CSRF_HEADER_NAME = "X-CSRFToken" + +# multifactor auth +MFA_URL = '/accounts/2fa/login' + +SALT_KEY = os.environ['SALT_KEY'] + +MFA_ISSUER_NAME = 'MDBlog' + +# Configure mail here +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' diff --git a/markdownblog/markdownblog/static/base.css b/markdownblog/markdownblog/static/base.css index 3cfe968..705328e 100644 --- a/markdownblog/markdownblog/static/base.css +++ b/markdownblog/markdownblog/static/base.css @@ -24,4 +24,8 @@ header, main, footer { header, main, footer { padding-left: 0; } +} + +.mt-3 { + margin-top: 3em; } \ No newline at end of file diff --git a/markdownblog/markdownblog/templates/2fa/add-device.html b/markdownblog/markdownblog/templates/2fa/add-device.html new file mode 100644 index 0000000..87e930f --- /dev/null +++ b/markdownblog/markdownblog/templates/2fa/add-device.html @@ -0,0 +1,57 @@ +{% extends 'base/base.html' %} +{% load i18n static %} +{% block title %} + Add new 2FA device +{% endblock %} +{% block includehere %} +{% endblock %} +{% block content %} +
+ {% if form.errors.items|length == 1 %}{% translate "Please correct the error below." %}{% else %} + {% translate "Please correct the errors below." %}{% endif %} +
+ {% endif %} + +
+ {% if not d.setup_complete %}
+ Complete Setup
+ {% endif %}
+ Added: {{ d.created|date:"D, dS M Y" }}
+
+ {% if form.errors.items|length == 1 %}{% translate "Please correct the error below." %}{% else %} + {% translate "Please correct the errors below." %}{% endif %} +
+ {% endif %} +