Skip to content

Commit 40883cc

Browse files
committed
fetch toggles
1 parent ace11e6 commit 40883cc

File tree

6 files changed

+41
-3
lines changed

6 files changed

+41
-3
lines changed

connectid/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ class APIVersion:
334334
COMMCARE_CONNECT_CLIENT_SECRET = env("COMMCARE_CONNECT_CLIENT_SECRET", default="")
335335
CONNECT_INVITED_USER_URL = "https://connect.dimagi.com/users/invited_user/"
336336
CONNECT_RESEND_INVITES_URL = "https://connect.dimagi.com/users/resend_invites/"
337+
CONNECT_TOGGLES_URL = "https://connect.dimagi.com/users/toggles/"
337338

338339
# List of countries that are blacklisted from using PersonalID
339340
# Example: ["us", "ca", "gb"] (Alpha-2 country codes)

flags/utils.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from waffle.models import Switch
2+
3+
from utils.connect import get_connect_toggles
4+
5+
6+
def get_user_toggles(username=None, phone_number=None):
7+
switches = Switch.objects.all()
8+
connect_switches = get_connect_toggles(username=username, phone_number=phone_number)
9+
toggles = {switch.name: switch.active for switch in switches}
10+
toggles.update(connect_switches)
11+
return toggles

flags/views.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
from django.http import JsonResponse
22
from django.views import View
3-
from waffle.models import Switch
3+
4+
from .utils import get_user_toggles
45

56

67
class TogglesView(View):
78
def get(self, request):
8-
switches = Switch.objects.all()
9-
toggles = {switch.name: switch.active for switch in switches}
9+
username = None
10+
if request.user.is_authenticated:
11+
username = request.user.username
12+
toggles = get_user_toggles(username=username)
1013
return JsonResponse({"toggles": toggles})

users/tests/test_views.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,6 +1109,12 @@ def test_phone_mismatch(self, mock_verify_token, authed_client_token):
11091109

11101110
@pytest.mark.django_db
11111111
class TestStartConfigurationView:
1112+
@pytest.fixture(scope="class", autouse=True)
1113+
def mock_get_user_toggles(self):
1114+
with mock.patch("users.views.get_user_toggles") as mock_get_toggles:
1115+
mock_get_toggles.return_value = {}
1116+
yield mock_get_toggles
1117+
11121118
@patch("utils.app_integrity.decorators.check_number_for_existing_invites")
11131119
def test_no_integrity_token(self, check_number_mock, client):
11141120
check_number_mock.return_value = False
@@ -1200,6 +1206,7 @@ def test_session_started(self, mock_country_code, client):
12001206
assert session.gps_location == gps_location
12011207
assert not session.is_phone_validated
12021208
assert session.device_id == "device_id"
1209+
assert "toggles" in response.json()
12031210

12041211
@skip_app_integrity_check
12051212
@patch("users.models.ConfigurationSession.country_code", new_callable=PropertyMock)

users/views.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from rest_framework.decorators import api_view, authentication_classes, permission_classes
2424
from rest_framework.views import APIView
2525

26+
from flags.utils import get_user_toggles
2627
from services.ai.ocs import OpenChatStudio
2728
from utils import get_ip, get_sms_sender, send_sms
2829
from utils.app_integrity.decorators import require_app_integrity
@@ -108,10 +109,12 @@ def start_device_configuration(request):
108109

109110
token_session.save()
110111

112+
toggles = get_user_toggles(phone_number=data["phone_number"])
111113
response_data = {
112114
"required_lock": ConnectUser.get_device_security_requirement(data["phone_number"], request.invited_user),
113115
"demo_user": is_demo_user,
114116
"token": token_session.key,
117+
"toggles": toggles,
115118
}
116119

117120
if request.version == settings.API_VERSION.V1:

utils/connect.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,16 @@ def resend_connect_invite(user):
1919
"name": user.name,
2020
}
2121
requests.post(url, auth=auth, data=data)
22+
23+
24+
def get_connect_toggles(username=None, phone_number=None):
25+
url = settings.CONNECT_TOGGLES_URL
26+
auth = (settings.COMMCARE_CONNECT_CLIENT_ID, settings.COMMCARE_CONNECT_CLIENT_SECRET)
27+
params = {}
28+
if username is not None:
29+
params["username"] = username
30+
elif phone_number is not None:
31+
params["phone_number"] = phone_number
32+
response = requests.get(url, auth=auth, params=params)
33+
data = response.json()
34+
return {toggle["name"]: toggle["active"] for toggle in data.get("toggles", {})}

0 commit comments

Comments
 (0)