From 3b62bc7b0349a34faad9ad15c424feac3c961b3c Mon Sep 17 00:00:00 2001 From: RecursiveGreen Date: Wed, 28 Mar 2018 21:12:28 -0400 Subject: [PATCH] Enable token authentication. --- .../core/migrations/0002_create_dj_user.py | 9 +++++++++ savepointradio/savepointradio/settings/base.py | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/savepointradio/core/migrations/0002_create_dj_user.py b/savepointradio/core/migrations/0002_create_dj_user.py index 7d413ab..792b783 100644 --- a/savepointradio/core/migrations/0002_create_dj_user.py +++ b/savepointradio/core/migrations/0002_create_dj_user.py @@ -1,5 +1,6 @@ # Generated by Django 2.0 on 2017-12-27 21:22 +import binascii import os from django.conf import settings @@ -11,6 +12,7 @@ from core.utils import generate_password def create_dj_user(apps, schema_editor): User = apps.get_model('core', 'RadioUser') + Token = apps.get_model('authtoken', 'Token') db_alias = schema_editor.connection.alias new_password = generate_password() @@ -22,10 +24,17 @@ def create_dj_user(apps, schema_editor): is_dj=True) dj.save(using=db_alias) + # Since 'post_save' is impervious to migration scripts, this is pulled + # directly from the authtoken code for key generation. Otherwise, key will + # be blank. + token = Token(key=binascii.hexlify(os.urandom(20)).decode(), user=dj) + token.save(using=db_alias) + with open(os.path.join(settings.PROJECT_DIR, '.djinfo'), 'w') as f: f.write('Email: {}\n'.format(dj.email)) f.write('Name: {}\n'.format(dj.name)) f.write('Password: {}\n'.format(new_password)) + f.write('Token: {}\n'.format(token.key)) class Migration(migrations.Migration): diff --git a/savepointradio/savepointradio/settings/base.py b/savepointradio/savepointradio/settings/base.py index 7f7f93f..3888e36 100644 --- a/savepointradio/savepointradio/settings/base.py +++ b/savepointradio/savepointradio/settings/base.py @@ -39,6 +39,7 @@ INSTALLED_APPS = [ 'authtools', 'rest_framework', + 'rest_framework.authtoken', 'core.apps.CoreConfig', 'radio.apps.RadioConfig', @@ -92,6 +93,22 @@ USE_TZ = True WSGI_APPLICATION = 'savepointradio.wsgi.application' +# +# Django Rest Framework settings +# + +REST_FRAMEWORK = { + 'DEFAULT_AUTHENTICATION_CLASSES': ( + 'rest_framework.authentication.SessionAuthentication', + 'rest_framework.authentication.TokenAuthentication', + ), + 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', + 'DEFAULT_PERMISSION_CLASSES': ( + 'rest_framework.permissions.IsAuthenticated', + ), + 'PAGE_SIZE': 100, +} + # # Radio-specific settings #