Skip to content

Commit f3619ae

Browse files
committed
(fix) Remove unnecessary IPC request to Platform to get pennid (it's the id field of user)
1 parent 8f6bbf5 commit f3619ae

3 files changed

Lines changed: 9 additions & 82 deletions

File tree

backend/gsr_booking/api_wrapper.py

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
from gsr_booking.models import GSR, GroupMembership, GSRBooking, Reservation
2020
from gsr_booking.serializers import GSRBookingSerializer, GSRSerializer
21-
from portal.logic import get_user_info
2221
from utils.errors import APIError
2322

2423

@@ -231,29 +230,15 @@ def request(self, *args, **kwargs):
231230
except (ConnectTimeout, ReadTimeout, ConnectionError):
232231
raise APIError("AGH LibCal: Connection timeout")
233232

234-
def get_user_pennid(self, user):
235-
"""
236-
Get user's pennid.
237-
"""
238-
user_info = get_user_info(user)
239-
pennid = user_info.get("pennid")
240-
if not pennid:
241-
raise APIError("PennGroups: User pennid not found in Platform API response")
242-
return pennid
243-
244233
def get_authorized_rooms(self, user):
245234
"""
246235
Check which AGH rooms the user can access via PennGroups API.
247-
Returns dict mapping room extensions to their group info, or None if API fails.
236+
Returns dict mapping room extensions to their group info, or empty dict if none.
248237
"""
249-
try:
250-
# Get pennid from Platform API (PennGroups requires numerical pennid, not username)
251-
try:
252-
pennid = self.get_user_pennid(user)
253-
except APIError:
254-
raise APIError("PennGroups: Failed to get user pennid")
255238

256-
url = f"{PENNGROUPS_URL}{pennid}/groups"
239+
try:
240+
# user.id is the pennid (set by LabsUserBackend at authentication time)
241+
url = f"{PENNGROUPS_URL}{user.id}/groups"
257242
response = requests.get(
258243
url,
259244
auth=HTTPBasicAuth(settings.PENNGROUPS_USERNAME, settings.PENNGROUPS_PASSWORD),

backend/portal/logic.py

Lines changed: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import json
2-
import os
32
from collections import defaultdict
43

5-
import requests
64
from accounts.ipc import authenticated_request
75
from django.contrib.auth import get_user_model
86
from rest_framework.exceptions import PermissionDenied
@@ -14,38 +12,11 @@
1412

1513

1614
def get_user_info(user):
17-
"""
18-
Returns Platform user information.
19-
20-
In production: Uses IPC (authenticated_request)
21-
Locally (with PLATFORM_BEARER_TOKEN): Uses direct HTTP request with bearer token
22-
"""
23-
# Try IPC first (production)
24-
try:
25-
response = authenticated_request(user, "GET", "https://platform.pennlabs.org/accounts/me/")
26-
if response.status_code == 403:
27-
raise PermissionDenied("IPC request failed")
28-
return json.loads(response.content)
29-
except Exception as ipc_error:
30-
# Fall back to bearer token for local development/testing
31-
bearer_token = os.getenv("PLATFORM_BEARER_TOKEN")
32-
if bearer_token:
33-
try:
34-
response = requests.get(
35-
"https://platform.pennlabs.org/accounts/me/",
36-
headers={"Authorization": f"Bearer {bearer_token}"},
37-
timeout=5,
38-
)
39-
if response.status_code == 401:
40-
raise PermissionDenied("Invalid PLATFORM_BEARER_TOKEN")
41-
if response.status_code != 200:
42-
raise PermissionDenied(f"Platform API error: HTTP {response.status_code}")
43-
return response.json()
44-
except requests.exceptions.RequestException as e:
45-
raise PermissionDenied(f"Platform API request failed: {str(e)}")
46-
47-
# No bearer token available, re-raise the original IPC error
48-
raise PermissionDenied(f"IPC request failed: {str(ipc_error)}")
15+
"""Returns Platform user information"""
16+
response = authenticated_request(user, "GET", "https://platform.pennlabs.org/accounts/me/")
17+
if response.status_code == 403:
18+
raise PermissionDenied("IPC request failed")
19+
return json.loads(response.content)
4920

5021

5122
def get_user_clubs(user):

backend/tests/gsr_booking/test_gsr_wrapper.py

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,6 @@ def json(self):
153153
return MockResponse({})
154154

155155

156-
def mock_get_user_pennid(self, user):
157-
"""Mock pennid extraction"""
158-
return "12345678"
159-
160-
161156
class TestBookingWrapper(TestCase):
162157
@classmethod
163158
def setUpTestData(cls):
@@ -378,9 +373,6 @@ def test_group_wharton_availability(self, mock_is_seas, mock_is_wharton):
378373
@mock.patch("gsr_booking.models.WhartonGSRBooker.is_wharton", return_value=False)
379374
@mock.patch("gsr_booking.api_wrapper.PennGroupsBookingWrapper.request", mock_agh_libcal_request)
380375
@mock.patch("requests.get", mock_penngroups_api_get)
381-
@mock.patch(
382-
"gsr_booking.api_wrapper.PennGroupsBookingWrapper.get_user_pennid", mock_get_user_pennid
383-
)
384376
def test_is_seas(self, mock_is_wharton):
385377
"""Test SEAS status checking via PennGroups API"""
386378
from gsr_booking.api_wrapper import PennGroupsGSRBooker
@@ -478,9 +470,6 @@ def test_groupmembership_auto_sets_is_seas_false(self, mock_model_is_seas, mock_
478470
@mock.patch("gsr_booking.models.WhartonGSRBooker.is_wharton", return_value=False)
479471
@mock.patch("requests.get", mock_penngroups_api_get)
480472
@mock.patch("gsr_booking.api_wrapper.PennGroupsBookingWrapper.request", mock_agh_libcal_request)
481-
@mock.patch(
482-
"gsr_booking.api_wrapper.PennGroupsBookingWrapper.get_user_pennid", mock_get_user_pennid
483-
)
484473
def test_penngroups_availability(self, mock_is_seas, mock_is_wharton):
485474
"""Test AGH room availability for SEAS students"""
486475
availability = GSRBooker.get_availability(
@@ -508,9 +497,6 @@ def test_penngroups_availability(self, mock_is_seas, mock_is_wharton):
508497
@mock.patch("gsr_booking.models.WhartonGSRBooker.is_wharton", return_value=False)
509498
@mock.patch("requests.get", mock_penngroups_api_get)
510499
@mock.patch("gsr_booking.api_wrapper.PennGroupsBookingWrapper.request", mock_agh_libcal_request)
511-
@mock.patch(
512-
"gsr_booking.api_wrapper.PennGroupsBookingWrapper.get_user_pennid", mock_get_user_pennid
513-
)
514500
def test_book_penngroups(self, mock_is_seas, mock_is_wharton):
515501
"""Test booking an AGH room"""
516502
initial_reservation_count = Reservation.objects.count()
@@ -563,9 +549,6 @@ def test_cancel_penngroups(self, mock_is_seas, mock_is_wharton):
563549
@mock.patch("requests.get", mock_penngroups_api_get)
564550
@mock.patch("gsr_booking.api_wrapper.PennGroupsBookingWrapper.request", mock_agh_libcal_request)
565551
@mock.patch("gsr_booking.models.PennGroupsGSRBooker.is_seas", return_value=True)
566-
@mock.patch(
567-
"gsr_booking.api_wrapper.PennGroupsBookingWrapper.get_user_pennid", mock_get_user_pennid
568-
)
569552
def test_group_book_penngroups(self, mock_model_is_seas, mock_is_wharton):
570553
"""Test group booking for AGH rooms"""
571554
# Make sure group_user is SEAS - when membership is created, is_seas will be auto-set
@@ -649,9 +632,6 @@ def test_non_seas_book_fails(self, mock_is_seas, mock_is_wharton):
649632
@mock.patch("gsr_booking.models.WhartonGSRBooker.is_wharton", return_value=False)
650633
@mock.patch("requests.get", mock_penngroups_api_get)
651634
@mock.patch("gsr_booking.api_wrapper.PennGroupsBookingWrapper.request")
652-
@mock.patch(
653-
"gsr_booking.api_wrapper.PennGroupsBookingWrapper.get_user_pennid", mock_get_user_pennid
654-
)
655635
def test_unauthorized_room_booking_fails(self, mock_request, mock_is_seas, mock_is_wharton):
656636
"""Test that users cannot book rooms they're not authorized for"""
657637

@@ -714,9 +694,6 @@ def json(self):
714694
@mock.patch("requests.get", mock_penngroups_api_get)
715695
@mock.patch("gsr_booking.api_wrapper.PennGroupsBookingWrapper.request", mock_agh_libcal_request)
716696
@mock.patch("gsr_booking.models.PennGroupsGSRBooker.is_seas", return_value=True)
717-
@mock.patch(
718-
"gsr_booking.api_wrapper.PennGroupsBookingWrapper.get_user_pennid", mock_get_user_pennid
719-
)
720697
def test_group_penngroups_availability(self, mock_model_is_seas, mock_is_wharton):
721698
"""Test group availability for AGH rooms"""
722699
# Test that group availability works when group has SEAS members
@@ -808,9 +785,6 @@ def test_is_room_authorized(self):
808785

809786
@mock.patch("gsr_booking.models.WhartonGSRBooker.is_wharton", return_value=False)
810787
@mock.patch("requests.get")
811-
@mock.patch(
812-
"gsr_booking.api_wrapper.PennGroupsBookingWrapper.get_user_pennid", mock_get_user_pennid
813-
)
814788
def test_get_authorized_rooms_api_errors(self, mock_get, mock_is_wharton):
815789
"""Test error handling in get_authorized_rooms"""
816790
from gsr_booking.api_wrapper import PennGroupsGSRBooker
@@ -879,9 +853,6 @@ def test_cancel_penngroups_marks_booking_cancelled(self, mock_is_seas, mock_is_w
879853
@mock.patch("requests.get", mock_penngroups_api_get)
880854
@mock.patch("gsr_booking.api_wrapper.PennGroupsBookingWrapper.request", mock_agh_libcal_request)
881855
@mock.patch("gsr_booking.models.PennGroupsGSRBooker.is_seas", return_value=True)
882-
@mock.patch(
883-
"gsr_booking.api_wrapper.PennGroupsBookingWrapper.get_user_pennid", mock_get_user_pennid
884-
)
885856
def test_group_book_penngroups_credit_distribution(self, mock_model_is_seas, mock_is_wharton):
886857
"""Test that group bookings properly distribute credits among members"""
887858
# Set up group with multiple SEAS members

0 commit comments

Comments
 (0)