Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions ietf/api/urls_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
from ietf.utils.urls import url

urlpatterns = [
url(r'^doc/create_demo_draft/$', views_rpc.create_demo_draft),
url(r'^doc/drafts/(?P<doc_id>[0-9]+)$', views_rpc.rpc_draft),
url(r'^doc/submitted_to_rpc/$', views_rpc.submitted_to_rpc),
url(r'^person/create_demo_person/$', views_rpc.create_demo_person),
url(r'^person/(?P<person_id>[0-9]+)$', views_rpc.rpc_person),
url(r'^persons/$', views_rpc.rpc_persons),
url(r"^doc/create_demo_draft/$", views_rpc.create_demo_draft),
url(r"^doc/drafts/(?P<doc_id>[0-9]+)$", views_rpc.rpc_draft),
url(r"^doc/submitted_to_rpc/$", views_rpc.submitted_to_rpc),
url(r"^person/create_demo_person/$", views_rpc.create_demo_person),
url(r"^person/(?P<person_id>[0-9]+)$", views_rpc.rpc_person),
url(r"^persons/$", views_rpc.rpc_persons),
url(r"^subject/(?P<subject_id>[0-9]+)/person/$", views_rpc.rpc_subject_person),
]
17 changes: 17 additions & 0 deletions ietf/api/views_rpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
)
from django.shortcuts import get_object_or_404
from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth.models import User

from ietf.api.ietf_utils import requires_api_token
from ietf.doc.factories import WgDraftFactory # DO NOT MERGE INTO MAIN
Expand All @@ -27,6 +28,22 @@ def rpc_person(request, person_id):
"plain_name": person.plain_name(),
})

@csrf_exempt
@requires_api_token("ietf.api.views_rpc")
def rpc_subject_person(request, subject_id):
try:
user_id = int(subject_id)
except ValueError:
return JsonResponse({"error": "Invalid subject id"}, status=400)
try:
user = User.objects.get(pk=user_id)
except User.DoesNotExist:
return JsonResponse({"error": "Unknown subject"}, status=404)
if hasattr(user, "person"): # test this way to avoid exception on reverse OneToOneField
return rpc_person(request, person_id=user.person.pk)
return JsonResponse({"error": "Subject has no person"}, status=404)


@csrf_exempt
@requires_api_token("ietf.api.views_rpc")
def rpc_persons(request):
Expand Down
41 changes: 40 additions & 1 deletion rpcapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/SubmittedToQueue'

/doc/drafts/{docId}:
get:
operationId: get_draft_by_id
Expand All @@ -151,6 +151,38 @@ paths:
'404':
description: Not found

/subject/{subjectId}/person:
get:
operationId: get_subject_person_by_id
summary: Find person for OIDC subject by ID
description: Returns a single person
parameters:
- name: subjectId
in: path
description: subject ID of person to return
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Person'
'400':
description: No such subject or no person for this subject
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No such subject or no person for this subject
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'

components:
schemas:
Person:
Expand Down Expand Up @@ -180,6 +212,13 @@ components:
submitted:
type: string
format: date

ErrorResponse:
type: object
properties:
error:
type: string

Draft:
type: object
properties:
Expand Down