All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.uiuc.ncsa.myproxy.oa4mp.server.servlet.AbstractAccessTokenServlet Maven / Gradle / Ivy

The newest version!
package edu.uiuc.ncsa.myproxy.oa4mp.server.servlet;

import edu.uiuc.ncsa.security.core.exceptions.GeneralException;
import edu.uiuc.ncsa.security.core.util.MetaDebugUtil;
import edu.uiuc.ncsa.oa4mp.delegation.server.ServiceTransaction;
import edu.uiuc.ncsa.oa4mp.delegation.server.request.ATRequest;
import edu.uiuc.ncsa.oa4mp.delegation.server.request.ATResponse;
import edu.uiuc.ncsa.oa4mp.delegation.common.servlet.TransactionState;
import edu.uiuc.ncsa.oa4mp.delegation.common.storage.clients.Client;
import edu.uiuc.ncsa.oa4mp.delegation.common.token.AuthorizationGrant;
import edu.uiuc.ncsa.oa4mp.delegation.common.token.Verifier;
import edu.uiuc.ncsa.security.storage.GenericStoreUtils;
import edu.uiuc.ncsa.security.storage.XMLMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 

Created by Jeff Gaynor
* on 9/25/13 at 1:37 PM */ public abstract class AbstractAccessTokenServlet extends MyProxyDelegationServlet { @Override protected void doIt(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Throwable { // printAllParameters(httpServletRequest); doDelegation(httpServletRequest, httpServletResponse); } protected abstract ATRequest getATRequest(HttpServletRequest request, ServiceTransaction transaction); protected abstract ServiceTransaction getTransaction(AuthorizationGrant ag, HttpServletRequest req) throws ServletException; /** * Contract: if the token gets updated (might have to because of changes to token versions), return it. * If no changes, return null. * @param ag * @return */ protected abstract AuthorizationGrant checkAGExpiration(AuthorizationGrant ag); protected IssuerTransactionState doDelegation(Client client, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Throwable, ServletException { createDebugger(client).info(this,"5.a. Starting access token exchange"); info("5.a. Starting access token exchange"); AuthorizationGrant ag = getServiceEnvironment().getTokenForge().getAuthorizationGrant(httpServletRequest); AuthorizationGrant updatedAG = checkAGExpiration(ag); ServiceTransaction transaction = getTransaction(ag, httpServletRequest); return getIssuerTransactionState(httpServletRequest, httpServletResponse, updatedAG, transaction, GenericStoreUtils.toXML(getTransactionStore(), transaction)); } /** * Default for standard token endpoint call. * @param httpServletRequest * @param httpServletResponse * @param updatedAG * @param transaction * @return * @throws Throwable */ protected IssuerTransactionState getIssuerTransactionState(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthorizationGrant updatedAG, ServiceTransaction transaction, XMLMap backup) throws Throwable { return getIssuerTransactionState( httpServletRequest, httpServletResponse, updatedAG, transaction, backup, false); } protected IssuerTransactionState getIssuerTransactionState(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthorizationGrant updatedAG, ServiceTransaction transaction, XMLMap backup, boolean isRFC8628) throws Throwable { if(updatedAG != null){ // This allows for maintaining version 4.x to 5.x token compatibility transaction.setAuthorizationGrant(updatedAG); } MetaDebugUtil debugger = createDebugger(transaction.getClient()); ATRequest atRequest = getATRequest(httpServletRequest, transaction); Verifier v = getServiceEnvironment().getTokenForge().getVerifier(httpServletRequest); atRequest.setVerifier(v); // can be null atRequest.setAuthorizationGrant(updatedAG); ATResponse atResp = (ATResponse) getATI().process(atRequest); if(!isRFC8628) { transaction = verifyAndGet(atResp); } String cc = "client=" + transaction.getClient(); debugger.info(this,"5.a. got access token " + cc); preprocess(new TransactionState(httpServletRequest, httpServletResponse, atResp.getParameters(), transaction, backup)); debugger.trace(this,"5.a. access token = " + atResp.getAccessToken() + (v!=null?(" for verifier = " + v):"")); transaction.setAuthGrantValid(false); transaction.setAccessToken(atResp.getAccessToken()); transaction.setAccessTokenValid(true); try { getTransactionStore().save(transaction); debugger.info(this,"5.a. updated transaction state for " + cc + ", sending response to client"); } catch (GeneralException e) { throw new ServletException("Error saving transaction", e); } // atResp.write(httpServletResponse); debugger.info(this,"5.b. done with access token exchange with " + cc); IssuerTransactionState transactionState = new IssuerTransactionState(httpServletRequest, httpServletResponse, atResp.getParameters(), transaction, backup, atResp); transactionState.setRfc8628(isRFC8628); postprocess(transactionState); return transactionState; } /** * Note that this method does not write the response (using the issuer response). You must * do that in your implementation after you have finished all processing. If we were to do that here, * the response would be written prematurely. * * @param httpServletRequest * @param httpServletResponse * @return * @throws Throwable * @throws ServletException */ protected IssuerTransactionState doDelegation(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Throwable, ServletException { return doDelegation(getClient(httpServletRequest), httpServletRequest, httpServletResponse); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy