fr.wseduc.cas.data.DataHandler Maven / Gradle / Ivy
package fr.wseduc.cas.data;
import fr.wseduc.cas.async.Handler;
import fr.wseduc.cas.async.Tuple;
import fr.wseduc.cas.entities.AuthCas;
import fr.wseduc.cas.entities.ProxyTicket;
import fr.wseduc.cas.entities.ServiceTicket;
import fr.wseduc.cas.entities.User;
import fr.wseduc.cas.exceptions.AuthenticationException;
import fr.wseduc.cas.exceptions.ErrorCodes;
import fr.wseduc.cas.exceptions.Try;
import fr.wseduc.cas.exceptions.ValidationException;
import fr.wseduc.cas.http.Request;
public abstract class DataHandler {
protected final Request request;
protected DataHandler(Request request) {
this.request = request;
}
public abstract void validateService(String service, Handler handler);
public abstract void authenticateUser(String user, String password, AuthCas authCas,
Handler> handler);
public void validateTicket(final String ticket, final String service,
final Handler>> handler) {
getAuth(ticket, new Handler() {
@Override
public void handle(final AuthCas authCas) {
ServiceTicket st;
long now = System.currentTimeMillis();
if (authCas != null && (st = authCas.getServiceTicket(ticket)) != null &&
!st.isUsed() && (now - st.getIssued()) < 300000) {
st.setUsed(true);
validateService(authCas, st, service, handler);
} else {
handler.handle(new Try>(
new ValidationException(ErrorCodes.INVALID_TICKET)));
}
}
});
}
protected void validateService(final AuthCas authCas, final ServiceTicket st, final String service,
final Handler>> handler) {
if (st.getService().equalsIgnoreCase(service)) {
getUser(authCas.getUser(), service, new Handler() {
@Override
public void handle(User user) {
if (user != null) {
handler.handle(new Try>(
new Tuple<>(authCas, user)));
} else {
handler.handle(new Try>(
new ValidationException(ErrorCodes.INVALID_TICKET)));
}
}
});
} else {
handler.handle(new Try>(
new ValidationException(ErrorCodes.INVALID_SERVICE)));
}
}
public void validateProxyTicket(final String ticket, final String service,
final Handler>> handler) {
getAuthByProxyTicket(ticket, new Handler() {
@Override
public void handle(final AuthCas authCas) {
ServiceTicket st;
ProxyTicket pt;
long now = System.currentTimeMillis();
if (authCas != null && (st = authCas.getServiceTicketByProxyTicket(ticket)) != null &&
st.getPgt() != null && (pt = st.getPgt().getProxyTicket(ticket)) != null &&
!pt.isUsed() && (now - pt.getIssued()) < 300000) {
pt.setUsed(true);
validateService(authCas, st, service, handler);
} else {
handler.handle(new Try>(
new ValidationException(ErrorCodes.INVALID_TICKET)));
}
}
});
}
public void validateProxyGrantingTicket(final String pgt, final String targetService,
final Handler> handler) {
getAuthByProxyGrantingTicket(pgt, new Handler() {
@Override
public void handle(AuthCas authCas) {
if (authCas != null) {
ServiceTicket st = authCas.getServiceTicketByProxyGrantingTicket(pgt);
if (st != null && st.getService() != null && st.getService().equalsIgnoreCase(targetService)) {
handler.handle(new Try(authCas));
} else {
handler.handle(new Try(
new ValidationException(ErrorCodes.INVALID_SERVICE)));
}
} else {
handler.handle(new Try(
new ValidationException(ErrorCodes.INVALID_TICKET)));
}
}
});
}
protected abstract void getAuthByProxyGrantingTicket(String pgt, Handler handler);
protected abstract void getUser(String userId, String service, Handler handler);
protected abstract void getAuth(String ticket, Handler handler);
protected abstract void getAuthByProxyTicket(String ticket, Handler handler);
public abstract void getOrCreateAuth(Request request, Handler handler);
public abstract void persistAuth(AuthCas authCas, Handler handler);
public abstract void getAndDestroyAuth(Request request, Handler handler);
public abstract void getAndDestroyAuth(String user, Handler handler);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy