package fi.csc.emrex.smp; import java.net.URI; import java.net.URISyntaxException; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.client.RestTemplate; import javax.servlet.http.HttpServletRequest; @SpringBootApplication @EnableAutoConfiguration(exclude = { org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class }) public class FiSmpApplication { public static final String SHIB_SHIB_IDENTITY_PROVIDER = "shib-Shib-Identity-Provider"; public static void verifySessionId(String providedSessionId, String expectedSessionId) { System.out.println("expectedSessionId: " + expectedSessionId); if (!providedSessionId.equals(expectedSessionId)) { throw new RuntimeException("providedSessionId does not match"); } } public static boolean verifyElmoSignature(String elmo, String ncpKey) { return !(ncpKey == null); } public static void main(String[] args) { SpringApplication.run(FiSmpApplication.class, args); } public static List<NCPResult> getNCPs(String url) throws ParseException, URISyntaxException { RestTemplate template = new RestTemplate(); String result = template.getForObject(new URI(url), String.class); //System.out.println("Result: " + result); final JSONObject json = (JSONObject) new JSONParser().parse(result); Object NCPS = json.get("ncps"); List<Map> ncp_list = (List<Map>) NCPS; List<NCPResult> results = ncp_list.stream().map(ncp -> new NCPResult( (String) ncp.get("countryCode"), (String) ncp.get("acronym"), (String) ncp.get("url"), (String) ncp.get("pubKey") )).collect(Collectors.toList()); return results; } public static String getPubKeyByReturnUrl(String returnUrl, String emregUrl) throws Exception { String pubKey = null; System.out.println("pubkey by url: " + returnUrl); List<NCPResult> ncps = FiSmpApplication.getNCPs(emregUrl); for (NCPResult ncp : ncps) { if (ncp.getUrl().equals(returnUrl)) { System.out.println("Url matches: " + returnUrl); return ncp.getCertificate(); } } return pubKey; } public static NCPResult getNCPByReturnUrl(String returnUrl, String emregUrl) throws Exception { List<NCPResult> ncps = FiSmpApplication.getNCPs(emregUrl); for (NCPResult ncp : ncps) { if (ncp.getUrl().equals(returnUrl)) { return ncp; } } return null; } public static String getUrl(NCPChoice choice, HttpServletRequest request) { final String idp = request.getHeader(SHIB_SHIB_IDENTITY_PROVIDER); return idp != null ? choice.getUrl() + "Shibboleth.sso/Login?entityID=" + request.getHeader(SHIB_SHIB_IDENTITY_PROVIDER) : choice.getUrl(); } }