use of digilib.conf.DigilibServletRequest in project digilib by robcast.
the class Scaler method getLastModified.
/**
* Returns modification time relevant to the request for caching.
*
* @see javax.servlet.http.HttpServlet#getLastModified(javax.servlet.http.HttpServletRequest)
*/
public long getLastModified(HttpServletRequest request) {
accountlog.debug("GetLastModified from " + request.getRemoteAddr() + " for " + request.getQueryString());
long mtime = -1;
try {
// create new digilib request
DigilibServletRequest dlReq = new DigilibServletRequest(request, dlConfig);
DocuDirectory dd = dirCache.getDirectory(dlReq.getFilePath());
if (dd != null) {
mtime = dd.getDirMTime() / 1000 * 1000;
}
} catch (Exception e) {
logger.error("error in getLastModified: " + e.getMessage());
}
logger.debug(" returns " + mtime);
return mtime;
}
use of digilib.conf.DigilibServletRequest in project digilib by robcast.
the class ScalerNoThread method processRequest.
/**
* Service this request using the response.
*
* @param request
* @param response
* @throws ServletException
*/
public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException {
if (dlConfig == null) {
logger.error("ERROR: No Configuration!");
throw new ServletException("NO VALID digilib CONFIGURATION!");
}
accountlog.debug("request: " + request.getQueryString());
logger.debug("request: " + request.getQueryString());
long startTime = System.currentTimeMillis();
// parse request
DigilibServletRequest dlRequest = new DigilibServletRequest(request, dlConfig);
// type of error reporting
ErrMsg errMsgType = ErrMsg.IMAGE;
if (dlRequest.hasOption(DigilibOption.errtxt)) {
errMsgType = ErrMsg.TEXT;
} else if (dlRequest.hasOption(DigilibOption.errcode)) {
errMsgType = ErrMsg.CODE;
}
try {
// extract the job information
ImageJobDescription jobTicket = ImageJobDescription.getInstance(dlRequest, dlConfig);
/*
* check if we can fast-track without scaling
*/
ImageInput fileToLoad = (ImageInput) jobTicket.getInput();
// check permissions
if (useAuthorization) {
// is the current request/user authorized?
if (!authzOp.isAuthorized(dlRequest)) {
// send deny answer and abort
throw new AuthOpException();
}
}
// if requested, send image as a file
if (sendFileAllowed && jobTicket.getSendAsFile()) {
String mt = null;
if (jobTicket.hasOption(DigilibOption.rawfile)) {
mt = "application/octet-stream";
}
logger.debug("Sending RAW File as is.");
ServletOps.sendFile(fileToLoad.getFile(), mt, null, response, logger);
logger.info("Done in " + (System.currentTimeMillis() - startTime) + "ms");
return;
}
// it
if (!jobTicket.isTransformRequired()) {
logger.debug("Sending File as is.");
ServletOps.sendFile(fileToLoad.getFile(), null, null, response, logger);
logger.info("Done in " + (System.currentTimeMillis() - startTime) + "ms");
return;
}
// create job
ImageWorker job = new ImageWorker(dlConfig, jobTicket);
// get result immediately
DocuImage img = job.call();
// forced destination image type
String mt = null;
if (jobTicket.hasOption(DigilibOption.jpg)) {
mt = "image/jpeg";
} else if (jobTicket.hasOption(DigilibOption.png)) {
mt = "image/png";
}
// send image
ServletOps.sendImage(img, mt, response, logger);
logger.debug("Job Processing Time: " + (System.currentTimeMillis() - startTime) + "ms");
} catch (ImageOpException e) {
logger.error(e.getClass() + ": " + e.getMessage());
digilibError(errMsgType, Error.IMAGE, null, response);
} catch (IOException e) {
logger.error(e.getClass() + ": " + e.getMessage());
digilibError(errMsgType, Error.FILE, null, response);
} catch (AuthOpException e) {
logger.error(e.getClass() + ": " + e.getMessage());
digilibError(errMsgType, Error.AUTH, null, response);
}
}
use of digilib.conf.DigilibServletRequest in project digilib by robcast.
the class Manifester method getLastModified.
/**
* Returns modification time relevant to the request for caching.
*
* @see javax.servlet.http.HttpServlet#getLastModified(javax.servlet.http.HttpServletRequest)
*/
public long getLastModified(HttpServletRequest request) {
accountlog.debug("GetLastModified from " + request.getRemoteAddr() + " for " + request.getQueryString());
long mtime = -1;
try {
// create new digilib request
DigilibServletRequest dlRequest = new DigilibServletRequest(request, dlConfig, EnumSet.of(ParsingOption.omitIiifImageApi));
// get list of IIIF parameters
@SuppressWarnings("unchecked") List<String> iiifParams = (List<String>) dlRequest.getValue("request.iiif.elements");
// get identifier (first parameter)
String identifier = iiifParams.get(0);
// decode identifier to file path
dlRequest.setValueFromString("fn", dlRequest.decodeIiifIdentifier(identifier));
DocuDirectory dd = dirCache.getDirectory(dlRequest.getFilePath());
if (dd != null) {
// return rounded modification date of directory
mtime = dd.getDirMTime() / 1000 * 1000;
}
} catch (Exception e) {
logger.error("error in getLastModified: " + e.getMessage());
}
logger.debug(" returns " + mtime);
return mtime;
}
use of digilib.conf.DigilibServletRequest in project digilib by robcast.
the class Manifester method processRequest.
protected void processRequest(HttpServletRequest request, HttpServletResponse response) {
try {
// create DigilibRequest from ServletRequest, omit IIIF Image API parsing
DigilibServletRequest dlRequest = new DigilibServletRequest(request, dlConfig, EnumSet.of(ParsingOption.omitIiifImageApi));
// get list of IIIF parameters
@SuppressWarnings("unchecked") List<String> iiifParams = (List<String>) dlRequest.getValue("request.iiif.elements");
if (iiifParams == null) {
logger.error("Invalid IIIF request.");
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid IIIF request.");
return;
}
// get identifier (first parameter)
// allow empty identifier for image root dir
String identifier = "";
if (iiifParams.size() > 0) {
identifier = iiifParams.get(0);
}
// decode identifier to file path
dlRequest.setValueFromString("fn", dlRequest.decodeIiifIdentifier(identifier));
// get directory path
String dlFn = dlRequest.getFilePath();
// get information about the directory
DocuDirectory dlDir = dirCache.getDirectory(dlFn);
if (dlDir == null) {
logger.error("Directory for manifest not found: " + dlFn);
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
// check for existing manifest file
File mfFile = new File(dlDir.getDir(), "manifest.json");
// check for image files
if ((dlDir.size() == 0) && !mfFile.canRead()) {
logger.debug("Directory has no files: " + dlFn);
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
ManifestParams params = new ManifestParams();
/*
* set CORS header ACAO "*" for info response as per IIIF spec
*/
if (corsForInfoRequests) {
String origin = request.getHeader("Origin");
if (origin != null) {
response.setHeader("Access-Control-Allow-Origin", "*");
}
}
/*
* check permissions
*/
if (useAuthorization) {
// is the current request/user authorized?
if (!authzOp.isAuthorized(dlRequest)) {
// send deny answer and abort
throw new AuthOpException("Access denied!");
}
}
// use JSON-LD content type only when asked
String accept = request.getHeader("Accept");
if (accept != null && accept.contains("application/ld+json")) {
response.setContentType("application/ld+json");
} else {
response.setContentType("application/json");
}
if (mfFile.canRead()) {
// send manifest file
ServletOps.sendFile(mfFile, "", "", response);
return;
}
// check for manifest-meta.json file with additional metadata
File mfMetaFile = new File(dlDir.getDir(), "manifest-meta.json");
if (mfMetaFile.canRead()) {
params.mfMetaFile = mfMetaFile;
}
/*
* configure base URLs for manifest
*/
params.imgApiUrl = dlConfig.getAsString("iiif-image-base-url");
String manifestBaseUrl = dlConfig.getAsString("iiif-manifest-base-url");
if ("".equals(params.imgApiUrl) || "".equals(manifestBaseUrl)) {
// try to figure out base URLs
String servletBaseUrl = dlConfig.getAsString("webapp-base-url");
if ("".equals(servletBaseUrl)) {
String url = request.getRequestURL().toString();
// get base URL for web application by last occurrence of Servlet path
int srvPathLen = url.lastIndexOf(request.getServletPath());
servletBaseUrl = url.substring(0, srvPathLen);
}
// manifest base URL
manifestBaseUrl = servletBaseUrl + request.getServletPath() + "/" + dlConfig.getAsString("iiif-prefix");
// Image API base URL
params.imgApiUrl = servletBaseUrl + "/" + this.scalerServletPath + "/" + dlConfig.getAsString("iiif-prefix");
}
// full manifest URL with identifier
params.manifestUrl = manifestBaseUrl + "/" + identifier;
params.identifier = identifier;
params.docuDir = dlDir;
/*
* start json representation
*/
ServletOutputStream out = response.getOutputStream();
JsonGenerator manifest = Json.createGenerator(out).writeStartObject();
/*
* manifest metadata
*/
writeManifestMeta(manifest, dlFn, params);
/*
* sequences
*/
writeSequences(manifest, params);
// manifest
manifest.writeEnd();
manifest.close();
} catch (IOException e) {
logger.error("ERROR sending manifest: ", e);
} catch (ImageOpException e) {
logger.error("ERROR sending manifest: ", e);
} catch (AuthOpException e) {
logger.debug("Permission denied.");
try {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
} catch (IOException e1) {
logger.error("Error sending error: ", e);
}
}
}
use of digilib.conf.DigilibServletRequest in project digilib by robcast.
the class IpServletAuthnOps method isUserInRole.
/* (non-Javadoc)
* @see digilib.auth.IpAuthnOps#isUserInRole(digilib.conf.DigilibRequest, java.lang.String)
*/
@Override
public boolean isUserInRole(DigilibRequest dlRequest, String role) throws AuthOpException {
HttpServletRequest request = ((DigilibServletRequest) dlRequest).getServletRequest();
// check if the requests IP provides a role
List<String> provided = super.getUserRoles(dlRequest);
if ((provided != null) && (provided.contains(role))) {
return true;
}
// use the ServletRequest
return request.isUserInRole(role);
}
Aggregations