Groovy Rule Template

Name/FHIRCommon/_reference/rule/DecodeIdToken.groovy
DescriptionDecode the provided idToken parameter
SummaryDecode the provided idToken parameter
Version1Latest1
Params
Name Required
idToken
outputPrefix
Content
/*
	 rule.summary=Decode the provided idToken parameter
	 rule.description=Decode the provided idToken parameter
	 rule.param.idToken.required=true
	 rule.param.outputPrefix.required=true
*/

assert !param.idToken.is(null): "The parameter 'idToken' was not supplied"
assert !param.outputPrefix.is(null): "The parameter 'outputPrefix' was not supplied"

String[] tokenParts = param.idToken.split("\\.")
assert tokenParts.length==3 : "Invalid id_token received. Expected three parts in the token"

String decodedHeader = decodeBase64(tokenParts[0])
String decodedPayload = decodeBase64(tokenParts[1])

def slurper = new groovy.json.JsonSlurper()
def parsedHeader = slurper.parseText(decodedHeader)
def parsedPayload = slurper.parseText(decodedPayload)

// This is a general rule for basic parsing of the id_token. It will produce all the output it can. The test script can extract what it 
// needs by declaring output parameters with the corresponding names below


output[param.outputPrefix+'-id-token-header'] = JsonOutput.toJson(parsedHeader)
output[param.outputPrefix+'-id-token-payload'] = JsonOutput.toJson(parsedPayload)

output[param.outputPrefix+'-id-token-header-alg'] = parsedHeader.alg
output[param.outputPrefix+'-id-token-header-typ'] = parsedHeader.typ
output[param.outputPrefix+'-id-token-header-kid'] = parsedHeader.kid

output[param.outputPrefix+'-id-token-payload-exp'] = parsedPayload.exp;
output[param.outputPrefix+'-id-token-payload-iat'] = parsedPayload.iat;
output[param.outputPrefix+'-id-token-payload-auth_time'] = parsedPayload.auth_time;
output[param.outputPrefix+'-id-token-payload-jti'] = parsedPayload.jti;
output[param.outputPrefix+'-id-token-payload-iss'] = parsedPayload.iss;
output[param.outputPrefix+'-id-token-payload-aud'] = parsedPayload.aud;
output[param.outputPrefix+'-id-token-payload-sub'] = parsedPayload.sub;
output[param.outputPrefix+'-id-token-payload-typ'] = parsedPayload.typ;
output[param.outputPrefix+'-id-token-payload-azp'] = parsedPayload.azp;
output[param.outputPrefix+'-id-token-payload-session_state'] = parsedPayload.session_state;
output[param.outputPrefix+'-id-token-payload-acr'] = parsedPayload.acr;