Skip to content

Commit 9d6ab40

Browse files
authored
BLUEBUTTON-669 Remove text message MFA (#708)
* Remove SMS MFA choice code from models * Remove mobile_phone_number from forms * Remove test for SMS MFA * Remove SMS logic from views
1 parent b0569e6 commit 9d6ab40

File tree

6 files changed

+4
-97
lines changed

6 files changed

+4
-97
lines changed

apps/accounts/end_user_signup_forms.py

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import logging
22
import binascii
33
from random import randint
4-
5-
from localflavor.us.forms import USPhoneNumberField
6-
74
from django import forms
85
from django.conf import settings
96
from django.contrib.auth.models import User, Group
@@ -207,13 +204,6 @@ class UserSignupForm(forms.Form):
207204
email = forms.EmailField(max_length=75, label=_("Email"))
208205
first_name = forms.CharField(max_length=100, label=_("First Name"))
209206
last_name = forms.CharField(max_length=100, label=_("Last Name"))
210-
mobile_phone_number = USPhoneNumberField(required=False,
211-
label=_("Mobile Phone Number "
212-
"(Optional)"),
213-
help_text=_("We use this for "
214-
"multi-factor "
215-
"authentication. "
216-
"US numbers only."))
217207

218208
password1 = forms.CharField(widget=forms.PasswordInput, max_length=120,
219209
label=_("Password"))
@@ -347,11 +337,6 @@ class AccountSettingsForm(forms.Form):
347337
help_text=_("Change this to turn on "
348338
"multi-factor "
349339
"authentication (MFA)."))
350-
mobile_phone_number = USPhoneNumberField(required=False,
351-
help_text=_("US numbers only. "
352-
"We use this for "
353-
"multi-factor "
354-
"authentication."))
355340
organization_name = forms.CharField(max_length=100,
356341
label=_('Organization Name'),
357342
required=False)
@@ -368,15 +353,6 @@ def clean_email(self):
368353
'already registered.'))
369354
return email.rstrip().lstrip().lower()
370355

371-
def clean_mobile_phone_number(self):
372-
mobile_phone_number = self.cleaned_data.get('mobile_phone_number', '')
373-
mfa_login_mode = self.cleaned_data.get('mfa_login_mode', '')
374-
if mfa_login_mode == "SMS" and not mobile_phone_number:
375-
raise forms.ValidationError(
376-
_('A mobile phone number is required to use SMS-based '
377-
'multi-factor authentication'))
378-
return mobile_phone_number
379-
380356
def clean_username(self):
381357
username = self.cleaned_data.get('username')
382358
username = username.rstrip().lstrip().lower()

apps/accounts/forms.py

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from apps.fhir.bluebutton.utils import get_resourcerouter
1111
from .models import Invitation, RequestInvite, UserProfile, create_activation_key, UserRegisterCode
1212
from .models import QUESTION_1_CHOICES, QUESTION_2_CHOICES, QUESTION_3_CHOICES, MFA_CHOICES
13-
from localflavor.us.forms import USPhoneNumberField
1413

1514

1615
logger = logging.getLogger('hhs_server.%s' % __name__)
@@ -146,13 +145,7 @@ class EndUserRegisterForm(forms.Form):
146145
password_reset_answer_2 = forms.CharField(max_length=50)
147146
password_reset_question_3 = forms.ChoiceField(choices=QUESTION_3_CHOICES)
148147
password_reset_answer_3 = forms.CharField(max_length=50)
149-
mobile_phone_number = USPhoneNumberField(required=False,
150-
label=_("Mobile Phone Number "
151-
"(Optional)"),
152-
help_text=_("We use this for "
153-
"multi-factor "
154-
"authentication. "
155-
"US numbers only."))
148+
156149
code = forms.CharField(
157150
max_length=30,
158151
label=_('Code'),
@@ -245,13 +238,6 @@ class SignupForm(forms.Form):
245238
label=_("First Name"))
246239
last_name = forms.CharField(max_length=100,
247240
label=_("Last Name"))
248-
mobile_phone_number = USPhoneNumberField(required=False,
249-
label=_("Mobile Phone Number "
250-
"(Optional)"),
251-
help_text=_("We use this for "
252-
"multi-factor "
253-
"authentication. "
254-
"US numbers only."))
255241
organization_name = forms.CharField(max_length=100,
256242
label=_("Organization Name"),
257243
required=True
@@ -378,11 +364,6 @@ def __init__(self, *args, **kwargs):
378364
help_text=_("Change this to turn on "
379365
"multi-factor "
380366
"authentication (MFA)."))
381-
mobile_phone_number = USPhoneNumberField(required=False,
382-
help_text=_("US numbers only. "
383-
"We use this for "
384-
"multi-factor "
385-
"authentication."))
386367
organization_name = forms.CharField(max_length=100,
387368
label=_('Organization Name'),
388369
required=True)
@@ -404,12 +385,3 @@ def clean_email(self):
404385
raise forms.ValidationError(_('This email address is '
405386
'already registered.'))
406387
return email.rstrip().lstrip().lower()
407-
408-
def clean_mobile_phone_number(self):
409-
mobile_phone_number = self.cleaned_data.get('mobile_phone_number', '')
410-
mfa_login_mode = self.cleaned_data.get('mfa_login_mode', '')
411-
if mfa_login_mode == "SMS" and not mobile_phone_number:
412-
raise forms.ValidationError(
413-
_('A mobile phone number is required to use SMS-based '
414-
'multi-factor authentication'))
415-
return mobile_phone_number

apps/accounts/models.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@
8989
MFA_CHOICES = (
9090
('', 'None'),
9191
('EMAIL', "Email"),
92-
('SMS', "Text Message (SMS)"),
9392
)
9493

9594
ISSUE_INVITE = (
@@ -240,9 +239,6 @@ def __str__(self):
240239

241240
def endpoint(self):
242241
e = ""
243-
up = UserProfile.objects.get(user=self.user)
244-
if self.mode == "SMS" and up.mobile_phone_number:
245-
e = up.mobile_phone_number
246242
if self.mode == "EMAIL" and self.user.email:
247243
e = self.user.email
248244
return e
@@ -253,11 +249,8 @@ def save(self, **kwargs):
253249
expires = now + timedelta(days=1)
254250
self.expires = expires
255251
self.code = str(random.randint(1000, 9999))
256-
up = UserProfile.objects.get(user=self.user)
257-
if self.mode == "SMS" and not up.mobile_phone_number:
258-
logger.info("Cannot send SMS. No phone number on file.")
259-
elif self.mode == "EMAIL" and self.user.email:
260-
# "Send SMS to self.user.email
252+
if self.mode == "EMAIL" and self.user.email:
253+
# "Send to self.user.email
261254
mfa_via_email(self.user, self.code)
262255
elif self.mode == "EMAIL" and not self.user.email:
263256
logger.info("Cannot send email. No email_on_file.")

apps/accounts/tests/test_mfa.py

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -54,31 +54,3 @@ def test_valid_mfa_login_with_email(self):
5454
# Logout)
5555
self.assertContains(response, 'Logout')
5656
self.client.get(reverse('mylogout'))
57-
58-
def test_valid_mfa_login_with_sms(self):
59-
"""
60-
Valid User can login with valid MFA code (SMS)
61-
"""
62-
# Change the user p to use SMS
63-
self.up.mfa_login_mode = "SMS"
64-
self.up.save()
65-
form_data = {'username': 'fred', 'password': 'bedrocks'}
66-
response = self.client.post(self.url, form_data, follow=True)
67-
self.assertEqual(response.status_code, 200)
68-
last_url, status_code = response.redirect_chain[-1]
69-
self.assertEqual(response.status_code, 200)
70-
# MFA user should not be logged in (yet)
71-
self.assertContains(response, 'Login')
72-
# Get the UID from the URL
73-
url_parts = last_url.split("/")
74-
uid = url_parts[-2]
75-
mfac = MFACode.objects.get(uid=uid)
76-
# complete the MFA process w/ valid code.
77-
response = self.client.post(
78-
reverse(
79-
'mfa_code_confirm', args=(
80-
uid,)), {
81-
'code': mfac.code}, follow=True)
82-
# Now that a valid code is provided, the user is logged in (sees
83-
# Logout)
84-
self.assertContains(response, 'Logout')

apps/accounts/views/core.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,6 @@ def account_settings(request):
146146
# update the user profile
147147
up.organization_name = data['organization_name']
148148
up.mfa_login_mode = data['mfa_login_mode']
149-
up.mobile_phone_number = data['mobile_phone_number']
150149
up.create_applications = data['create_applications']
151150
up.authorize_applications = True
152151
up.save()
@@ -167,7 +166,6 @@ def account_settings(request):
167166
'email': request.user.email,
168167
'organization_name': up.organization_name,
169168
'mfa_login_mode': up.mfa_login_mode,
170-
'mobile_phone_number': up.mobile_phone_number,
171169
'create_applications': up.create_applications,
172170
'last_name': request.user.last_name,
173171
'first_name': request.user.first_name,

apps/accounts/views/mfa.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,11 @@ def mfa_login(request):
109109
# Get User profile
110110
up, g_o_c = UserProfile.objects.get_or_create(user=user)
111111
# If MFA, send code and redirect
112-
if up.mfa_login_mode in ("SMS", "EMAIL") and settings.MFA:
112+
if up.mfa_login_mode in ("EMAIL",) and settings.MFA:
113113
# Create an MFA message
114114
mfac = MFACode.objects.create(
115115
user=up.user, mode=up.mfa_login_mode)
116116
# Send code and redirect
117-
if up.mfa_login_mode == "SMS":
118-
messages.info(
119-
request,
120-
_('An access code was sent to your mobile device. Please enter it here.'))
121117
if up.mfa_login_mode == "EMAIL":
122118
messages.info(
123119
request, _('An access code was sent to your email. Please enter it here.'))

0 commit comments

Comments
 (0)