Skip to content

Commit

Permalink
Adding full uber login
Browse files Browse the repository at this point in the history
  • Loading branch information
bitbyt3r committed Aug 14, 2024
1 parent 0cc123e commit d954fca
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 25 deletions.
13 changes: 8 additions & 5 deletions backend/tests/test_hotel.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,25 +48,28 @@ def test_clear_matches(client):
@patch('tuber.api.uber.requests.post')
def test_staffer_auth(mock_post, client):
"""Make sure the staffer login system is able to authenticate against uber"""
from tuber.database import db
from tuber.models import Event, Badge
event = Event(name="MAGWest 2024", description="West Event", uber_url="https://west2024.test.com", uber_apikey="123456", uber_slug="west2024")
db.add(event)
db.commit()
results = [{"result": []}, {"result": ["234"]},{"result": [{"id": "234", "email": "[email protected]", "assigned_depts_labels": [], "badge_status_label": "", "staffing": True, "badge_num": "", "badge_printed_name": "", "full_name": "", "first_name": "", "last_name": "", "legal_name": "", "ec_name": "", "ec_phone": "", "cellphone": ""}]}]
mock_post.return_value.json = results.pop
rv = client.post('/api/uber_login', json={"token": "234"})
rv = client.post('/api/uber/west2024/login', json={"token": "234"})
assert(rv.status_code == 200)

from tuber.database import db
from tuber.models import Badge
badge = Badge(email="[email protected]", uber_id="123")
db.add(badge)
db.commit()

results = [{"result": []}, {"result": ["123"]},{"result": [{"id": "123", "email": "[email protected]", "assigned_depts_labels": [], "badge_status_label": "", "staffing": True, "badge_num": "", "badge_printed_name": "", "full_name": "", "first_name": "", "last_name": "", "legal_name": "", "ec_name": "", "ec_phone": "", "cellphone": ""}]}]
mock_post.return_value.json = results.pop
rv = client.post('/api/uber_login', json={"token": "123"})
rv = client.post('/api/uber/west2024/login', json={"token": "123"})
assert(rv.status_code == 200)

results = [{"result": []}, {"result": ["234"]},{"result": [{"id": "456", "email": "[email protected]", "assigned_depts_labels": [], "badge_status_label": "", "staffing": True, "badge_num": "", "badge_printed_name": "", "full_name": "", "first_name": "", "last_name": "", "legal_name": "", "ec_name": "", "ec_phone": "", "cellphone": ""}]}]
mock_post.return_value.json = results.pop
rv = client.post('/api/uber_login', json={"token": "456"})
rv = client.post('/api/uber/west2024/login', json={"token": "456"})
assert(rv.status_code != 200)

def test_requests(client):
Expand Down
26 changes: 13 additions & 13 deletions backend/tuber/api/uber.py
Original file line number Diff line number Diff line change
Expand Up @@ -291,9 +291,9 @@ def sync_attendees(event):
print("done")
return "", 200

@app.route("/api/event/<int:event>/uber/login", methods=["POST"])
def staffer_auth(event):
event_obj = db.query(Event).filter(Event.id == event).one()
@app.route("/api/uber/<str:slug>/login", methods=["POST"])
def staffer_auth(slug):
event_obj = db.query(Event).filter(Event.uber_slug == slug).one()
if not User.query.first():
return "You must set up this server before using this method to log in.", 403
req = {
Expand Down Expand Up @@ -330,12 +330,12 @@ def staffer_auth(event):
if not uber_id in eligible:
return "You are not eligible", 403
if not badge:
staff_badge_type = db.query(BadgeType).filter(BadgeType.event == event, BadgeType.name == "Staff").one_or_none()
staff_badge_type = db.query(BadgeType).filter(BadgeType.event == event_obj.id, BadgeType.name == "Staff").one_or_none()
if not staff_badge_type:
staff_badge_type = BadgeType(name="Staff", description="Experienced Volunteers", event=event)
staff_badge_type = BadgeType(name="Staff", description="Experienced Volunteers", event=event_obj.id)
db.flush()
badge = Badge(
event=event,
event=event_obj.id,
badge_type=staff_badge_type.id,
printed_number=result['badge_num'],
printed_name=result['badge_printed_name'],
Expand All @@ -360,28 +360,28 @@ def staffer_auth(event):
for dept_id in uber_depts:
uber_depts_names[uber_depts[dept_id]] = dept_id

departments = db.query(Department).filter(Department.event == event).all()
departments = db.query(Department).filter(Department.event == event_obj.id).all()
dept_names = {}
for dept in departments:
dept_names[dept.name] = dept

for dept_name in result['assigned_depts_labels']:
if not dept_name in dept_names and dept_name in uber_depts_names:
new_dept = Department(uber_id=uber_depts_names[dept_name], event=event, name=dept_name)
new_dept = Department(uber_id=uber_depts_names[dept_name], event=event_obj.id, name=dept_name)
db.add(new_dept)
badge.departments.append(new_dept)
elif dept_name in dept_names:
badge.departments.append(dept_names[dept_name])
db.add(badge)
db.flush()
if not hotel_request:
hotel_request = HotelRoomRequest(event=event, badge=badge.id)
hotel_request = HotelRoomRequest(event=event_obj.id, badge=badge.id)
db.add(hotel_request)
db.flush()

permissions = {
"event": {
str(event): [
str(event_obj.id): [
"rooming.*.request",
"badge.*.searchname",
f"hotel_room_request.{hotel_request.id}.write",
Expand Down Expand Up @@ -412,9 +412,9 @@ def staffer_auth(event):
uber_dept_members = result['result']
for attendee in uber_dept_members['checklist_admins']:
if attendee['id'] == badge.uber_id:
if not str(event) in permissions["department"]:
permissions["department"][str(event)] = {}
permissions["department"][str(event)][str(department.id)] = [
if not str(event_obj.id) in permissions["department"]:
permissions["department"][str(event_obj.id)] = {}
permissions["department"][str(event_obj.id)][str(department.id)] = [
f"department.*.checklist_admin",
"hotel_request.*.approve"
]
Expand Down
5 changes: 3 additions & 2 deletions backend/tuber/models/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ class Event(Base):
name = Column(String(), unique=True)
description = Column(String())
readonly = Column(Boolean, default=False)
uber_url = Column(String())
uber_apikey = Column(String())
uber_url = Column(String(), nullable=True)
uber_apikey = Column(String(), nullable=True)
uber_slug = Column(String(), nullable=True)
11 changes: 8 additions & 3 deletions frontend/src/components/event/EventForm.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,22 @@

<div class="field">
<label for="description">Description</label><br />
<InputText v-model="data.description" id="description" type="text" placeholder="Describe this email" />
<InputText v-model="data.description" id="description" type="text" placeholder="Describe this event" />
</div>

<div class="field">
<label for="description">Uber Server URL</label><br />
<InputText v-model="data.uber_url" id="description" type="text" placeholder="Describe this email" />
<InputText v-model="data.uber_url" id="url" type="text" placeholder="https://event2035.reg.magfest.org/jsonrpc/" />
</div>

<div class="field">
<label for="description">Uber API Key</label><br />
<InputText v-model="data.uber_apikey" id="description" type="text" placeholder="Describe this email" />
<InputText v-model="data.uber_apikey" id="apikey" type="text" placeholder="API key with Read/Write permissions" />
</div>

<div class="field">
<label for="description">Uber Event Slug</label><br />
<InputText v-model="data.uber_slug" id="slug" type="text" placeholder="event2035" />
</div>

<div class="field-checkbox">
Expand Down
10 changes: 9 additions & 1 deletion frontend/src/views/rooming/UberDepartmentLogin.vue
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ export default {
return null
}
},
eventID () {
const urlParams = new URLSearchParams(window.location.search)
if (urlParams.has('event')) {
return urlParams.get('event')
} else {
return null
}
},
uberDepartment () {
const urlParams = new URLSearchParams(window.location.search)
if (urlParams.has('department')) {
Expand All @@ -56,7 +64,7 @@ export default {
},
methods: {
uberlogin () {
post('/api/uber_login', { token: this.uberID }).then((session) => {
post('/api/uber/' + this.eventID + '/login', { token: this.uberID }).then((session) => {
this.$store.dispatch(AppActionTypes.GET_LOGGED_IN)
get('/api/uber_department', { uber_id: this.uberDepartment }).then((departmentID) => {
this.$router.push({ name: 'roomapproval', params: { departmentID: departmentID.id } })
Expand Down
10 changes: 9 additions & 1 deletion frontend/src/views/rooming/UberLogin.vue
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ export default {
} else {
return null
}
},
eventID () {
const urlParams = new URLSearchParams(window.location.search)
if (urlParams.has('event')) {
return urlParams.get('event')
} else {
return null
}
}
},
watch: {
Expand All @@ -49,7 +57,7 @@ export default {
},
methods: {
uberlogin () {
post('/api/uber_login', { token: this.uberID }).then((session) => {
post('/api/uber/' + this.eventID + '/login', { token: this.uberID }).then((session) => {
this.$store.dispatch(AppActionTypes.GET_LOGGED_IN)
this.$router.push('/rooming/request')
}).catch((e) => {
Expand Down

0 comments on commit d954fca

Please sign in to comment.