Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BACK-2637] palmtree api #90

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ build
.idea/
/node_modules/
/tools/
.DS_Store
122 changes: 122 additions & 0 deletions reference/auth.v1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ tags:
description: >-
List and manage users.

- name: Attestation
description: >-
Attest and assert an app is a valid instance of an iOS app.

paths:
'/auth/login':
post:
Expand Down Expand Up @@ -722,6 +726,106 @@ paths:
security:
- serverToken: []

'/v1/attestations/challenges':
post:
operationId: CreateAttestationChallenge
summary: Create an attestation challenge.
description: >-
Starts the attestation flow by requesting an attestation challenge that the client will later use in an Apple API call and to verify an attestation.
requestBody:
content:
'application/json':
schema:
$ref: './auth/models/newappchallenge.v1.yaml'
responses:
'201':
$ref: '#/components/responses/AppChallenge'
'400':
$ref: './common/responses/badrequest.v1.yaml'
'401':
$ref: './common/responses/unauthorized.v1.yaml'
'403':
$ref: './common/responses/forbidden.v1.yaml'
security:
- sessionToken: []
tags:
- Attestation

'/v1/attestations/verifications':
post:
operationId: VerifyAttestation
summary: Verify an attestation.
description: >-
This confirms the app is a valid instance of an iOS app. It must use the previously generated challenge.
requestBody:
content:
'application/json':
schema:
$ref: './auth/models/attestationverify.v1.yaml'
responses:
'204':
description: The attestation was verified successfully.
'400':
$ref: './common/responses/badrequest.v1.yaml'
'401':
$ref: './common/responses/unauthorized.v1.yaml'
'403':
$ref: './common/responses/forbidden.v1.yaml'
security:
- sessionToken: []
tags:
- Attestation

'/v1/assertions/challenges':
post:
operationId: CreateAssertionChallenge
summary: Create an assertion challenge.
description: >-
Requests an assertion challenge be generated. This can only happen after attestation has been verified.
requestBody:
content:
'application/json':
schema:
$ref: './auth/models/newappchallenge.v1.yaml'
responses:
'201':
$ref: '#/components/responses/AppChallenge'
'400':
$ref: './common/responses/badrequest.v1.yaml'
'401':
$ref: './common/responses/unauthorized.v1.yaml'
'403':
$ref: './common/responses/forbidden.v1.yaml'
security:
- sessionToken: []
tags:
- Attestation

'/v1/assertions/verifications':
post:
operationId: VerifyAssertion
summary: Verify an assertion.
description: >-
This verifies an assertion and returns X.509 certficates.
requestBody:
content:
'application/json':
schema:
$ref: './auth/models/assertionverify.v1.yaml'
responses:
'200':
$ref: '#/components/responses/Assertion'
'400':
$ref: './common/responses/badrequest.v1.yaml'
'401':
$ref: './common/responses/unauthorized.v1.yaml'
'403':
$ref: './common/responses/forbidden.v1.yaml'
security:
- sessionToken: []
tags:
- Attestation

components:
securitySchemes:
basicAuth:
Expand Down Expand Up @@ -1001,3 +1105,21 @@ components:
required:
- code
- reason
AppChallenge:
description: 'Challenge generated by server and which client should use in later operations.'
headers:
'X-Tidepool-Session-Token':
$ref: './common/headers/tidepoolsessiontoken.v1.yaml'
content:
'application/json':
schema:
$ref: './auth/models/appchallenge.v1.yaml'
Assertion:
description: 'Certificates returned upon successful assertion.'
headers:
'X-Tidepool-Session-Token':
$ref: './common/headers/tidepoolsessiontoken.v1.yaml'
content:
'application/json':
schema:
$ref: './auth/models/assertionsecret.v1.yaml'
7 changes: 7 additions & 0 deletions reference/auth/models/appchallenge.v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
title: Challenge
description: Challenge generated by server.
type: object
properties:
challenge:
type: string
minLength: 1
8 changes: 8 additions & 0 deletions reference/auth/models/assertionsecret.v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
title: Assertion Secret
description: Data sent back upon successful app assertion.
type: object
properties:
data:
oneOf:
- $ref: './coastalresponse.v1.yaml'
- $ref: './palmtreeresponse.v1.yaml'
34 changes: 34 additions & 0 deletions reference/auth/models/assertionverify.v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
title: Assertion Verify
description: Request body for verifying an assertion.
type: object
properties:
assertion:
type: string
pattern: '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
description: Base64 encoded data received from Apple App Attest API. User must base64 encode the binary data received from Apple.
clientData:
type: object
properties:
challenge:
description: The previously returned assertion challenge.
type: string
minLength: 1
partner:
description: Code name of partner to retrieve certificate from.
type: string
minLength: 1
enum:
- Coastal
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since each of these enums aligns with a particular type of partner data, it would make sense to lift the oneOf up a level to the clientData object, so that a user can't supply "PalmTree" for the partner, which a verification from Coastal, and vice versa.

- PalmTree
partnerData:
oneOf:
- $ref: './coastalrequest.v1.yaml'
- $ref: './palmtreerequest.v1.yaml'
description: Actual data requested by client. Must include the previously requested challenge.
keyId:
$ref: './keyid.v1.yaml'
description: Base64 encoded key Id received from Apple App Attest API.
required:
- attestation
- clientData
- keyId
18 changes: 18 additions & 0 deletions reference/auth/models/attestationverify.v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
title: Attestation Verify
description: Request body for verifying an attestation.
type: object
properties:
attestation:
type: string
pattern: '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
description: Base64 encoded data received from Apple App Attest API. User must base64 encode the binary data received from Apple.
challenge:
type: string
minLength: 1
description: The previously returned attestation challenge.
keyId:
$ref: './keyid.v1.yaml'
required:
- attestation
- challenge
- keyId
22 changes: 22 additions & 0 deletions reference/auth/models/coastalrequest.v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
title: Coastal Request Data
description: Data to send to Coastal's API.
type: object
properties:
rcInstanceId:
type: string
minLength: 1
rcHWVersion:
type: string
rcSWVersion:
type: string
phdTypeId:
type: string
minLength: 1
phdInstanceId:
type: string
minLength: 1
csr:
type: string
pattern: '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
description: Base64 encoded string of the PEM formatted certificate signing request to Coastal.
minLength: 1
21 changes: 21 additions & 0 deletions reference/auth/models/coastalresponse.v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
title: Coastal Response
description: Data retrieved from Coastal's API.
type: object
properties:
certificates:
description: X.509 certificates to be used for client authentication.
type: array
items:
type: object
properties:
content:
type: string
pattern: '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
description: base64 encoded X.509 certificate in DER format.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Huh, kinda weird that they just don't use PEM here, but I guess base64-encoded DER saves a few bytes probably... shrug. Just a weird observation.

ttlInDays:
type: integer
type:
type: string
enum:
- CONSTRAINED
- WILDCARD
4 changes: 4 additions & 0 deletions reference/auth/models/keyid.v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
title: Key Id
description: Base64 encoded key identifier received from apple. The Key Id is some shortened data, usually a hash, used to identify the longer actual key.
type: string
pattern: '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
10 changes: 10 additions & 0 deletions reference/auth/models/newappchallenge.v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
title: New App Challenge
description: Information needed when generating an attestation or assertion challenge.
type: object
properties:
keyId:
type: string
pattern: '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
description: Base64 encoded key Id received from Apple App Attest API.
required:
- keyId
8 changes: 8 additions & 0 deletions reference/auth/models/palmtreerequest.v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
title: Palm Tree Request Data
description: Data to send to Palm Tree's API.
type: object
properties:
csr:
description: Base64 encoded string of the DER formatted certificate signing request to PalmTree.
type: string
pattern: '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
24 changes: 24 additions & 0 deletions reference/auth/models/palmtreeresponse.v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
title: Palm Tree Response
description: Data retrieved from Palm Tree's API.
type: object
properties:
type:
type: string
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is likely an enum of some sort?

enrollment:
type: object
properties:
body:
type: string
description: PEM encoded certificate.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LOL, so Palm Tree uses PEM and Coastal Base64-encoded DER. Weird.

id:
type: string
issuerName:
type: string
serialNumber:
type: string
subjectName:
type: string
status:
type: string
validityPeriod:
type: string
4 changes: 4 additions & 0 deletions reference/common/models/base64.v1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
title: Base64
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this file referenced anywhere?

It'd be good if it could be used, as it's hard to proof check that regex pattern in the many places it's used, especially compared to proofchecking the spelling of "base64.v1.yaml" :D

type: string
description: Base64 encoded data.
pattern: '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
Loading