/** * */ package edu.gatech.i3l.fhir.security; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.List; import javax.servlet.http.HttpServletRequest; import ca.uhn.fhir.model.api.ExtensionDt; import ca.uhn.fhir.model.dstu2.resource.Bundle; import ca.uhn.fhir.model.dstu2.resource.Conformance; import ca.uhn.fhir.model.dstu2.resource.Conformance.Rest; import ca.uhn.fhir.model.dstu2.resource.Conformance.RestSecurity; import ca.uhn.fhir.model.dstu2.valueset.RestfulSecurityServiceEnum; import ca.uhn.fhir.model.primitive.StringDt; import ca.uhn.fhir.model.primitive.UriDt; import ca.uhn.fhir.rest.server.RestfulServer; import edu.gatech.i3l.fhir.jpa.dao.IFhirSystemDao; import edu.gatech.i3l.fhir.jpa.provider.JpaConformanceProviderDstu2; /** * @author mc142local * */ public class SMARTonFHIRConformanceStatement extends JpaConformanceProviderDstu2 { // static String authorizeURI = // "http://fhir-registry.smarthealthit.org/Profile/oauth-uris#authorize"; // static String tokenURI = // "http://fhir-registry.smarthealthit.org/Profile/oauth-uris#token"; // static String registerURI = // "http://fhir-registry.smarthealthit.org/Profile/oauth-uris#register"; static String oauthURI = "http://fhir-registry.smarthealthit.org/StructureDefinition/oauth-uris"; static String authorizeURI = "authorize"; static String tokenURI = "token"; static String registerURI = "register"; String authorizeURIvalue = "http://localhost:9085/authorize"; String tokenURIvalue = "http://localhost:9085/token"; String registerURIvalue = "http://localhost:9085/register"; public SMARTonFHIRConformanceStatement(RestfulServer theRestfulServer, IFhirSystemDao<Bundle> theSystemDao) { super(theRestfulServer, theSystemDao); setCache(false); // try { // InetAddress addr = java.net.InetAddress.getLocalHost(); // System.out.println(addr); // String hostname = addr.getCanonicalHostName(); // System.out.println("Hostname of system = " + hostname); // // // authorizeURIvalue = "http://"+hostname+":9085/authorize"; // // tokenURIvalue = "http://"+hostname+":9085/token"; // // registerURIvalue = "http://"+hostname+":9085/register"; // } catch (UnknownHostException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } } @Override public Conformance getServerConformance(HttpServletRequest theRequest) { Conformance conformanceStatement = super.getServerConformance(theRequest); RestSecurity restSec = new RestSecurity(); // Set security.service restSec.setService(RestfulSecurityServiceEnum.SMART_ON_FHIR); // We need to add SMART on FHIR required conformance statement. ExtensionDt authorizeExtension = new ExtensionDt(false, authorizeURI, new UriDt(authorizeURIvalue)); ExtensionDt tokenExtension = new ExtensionDt(false, tokenURI, new UriDt(tokenURIvalue)); ExtensionDt registerExtension = new ExtensionDt(false, registerURI, new UriDt(registerURIvalue)); ExtensionDt secExtension = new ExtensionDt(); secExtension.setUrl(oauthURI); secExtension.addUndeclaredExtension(authorizeExtension); secExtension.addUndeclaredExtension(tokenExtension); secExtension.addUndeclaredExtension(registerExtension); restSec.addUndeclaredExtension(secExtension); // restSec.addUndeclaredExtension(authorizeExtension); // restSec.addUndeclaredExtension(tokenExtension); // restSec.addUndeclaredExtension(registerExtension); List<Rest> rests = conformanceStatement.getRest(); if (rests == null || rests.size() <= 0) { Rest rest = new Rest(); rest.setSecurity(restSec); conformanceStatement.addRest(rest); } else { Rest rest = rests.get(0); rest.setSecurity(restSec); } return conformanceStatement; } public void setAuthServerUrl(String url) { if (url.endsWith("/")) { authorizeURIvalue = url+"authorize"; tokenURIvalue = url+"token"; registerURIvalue = url+"register"; } else { authorizeURIvalue = url+"/authorize"; tokenURIvalue = url+"/token"; registerURIvalue = url+"/register"; } } }