public void initialise(String scriptFullName, ServiceOperationInterface parentService) { String currentDirectory; File file = new File(scriptFullName); currentDirectory = file.getParent(); if (startDirectory != null) { /* Relative directory... */ if (startDirectory.startsWith(".")) { startDirectory = currentDirectory + File.separator + startDirectory; file = new File(startDirectory); try { startDirectory = file.getCanonicalPath(); } catch (Exception ex) { log.warn("Could not convert the path [" + file.getAbsolutePath() + "]: " + ex.toString()); } } /* else absolute directory specified... therefore just use the specified directory... */ } else { /* No start directory specified, so use the scripts' directory... */ startDirectory = currentDirectory; } log.info("startDirectory => [" + startDirectory + "]"); this.parentService = parentService; return; }
public void invokeOperation(String responseFormat, ServiceScriptHelper helper) throws Exception { /* We expect that the properties file name is a parameter in the URL.. */ String filename = parameters.getProperty(FILE_NAME_PARAM, ""); if (filename.equals("")) { helper.errorResponse( "The [" + FILE_NAME_PARAM + "] parameter has not been specified.", responseFormat, parentService); return; } /* See if the client has specified a relative name... */ File file; file = new File(startDirectory + File.separator + filename); log.info("***-> startDirectory = [" + file.getAbsolutePath() + "]"); if (file.exists() == false) { helper.errorResponse( "The file [" + filename + "] could not be found.", responseFormat, parentService); return; } /* Check that the filename has a valid extension... */ if (validExtensions.length > 0) { boolean valid = false; for (int idx = 0; idx < validExtensions.length; idx++) { if (filename.endsWith(validExtensions[idx].trim())) { valid = true; break; } } if (valid == false) { log.error("User tried to access a file [" + filename + "] with an invalid file extension."); helper.errorResponse( "The extension of the file you are trying to access is invalid.", responseFormat, parentService); return; } } /* Try to read the contents of the file into a string buffer... */ StringBuffer content = new StringBuffer(); try { FileInputStream fis = new FileInputStream(file); byte[] buf = new byte[1024]; int len = 0; while ((len = fis.read(buf)) != -1) { content.append(new String(buf, 0, len)); } } catch (Exception ex) { helper.errorResponse( "There was an exception reading the contents of the file [" + filename + "]: " + ex.toString(), responseFormat, parentService); return; } /** If the operation is to return RAW data then just write the file contents... */ if (responseFormat.equals("RAW")) { helper.writeResponse(content.toString(), responseFormat, parentService); return; } /* Convert the contents into a base64 encoded string... */ BASE64Encoder encoder = new BASE64Encoder(); String encodedContent = encoder.encode(content.toString().getBytes()); /* Build the response string... */ StringBuffer responseString = new StringBuffer(); responseString.append("<fileContents>"); responseString.append( "<" + SetFileContents.FILENAME_ELEMENT + ">" + filename + "</" + SetFileContents.FILENAME_ELEMENT + ">"); responseString.append( "<" + SetFileContents.ENCODEDCONTENT_ELEMENT + ">" + encodedContent + "</" + SetFileContents.ENCODEDCONTENT_ELEMENT + ">"); responseString.append("</fileContents>"); /* Send the list down to the client... */ helper.writeResponse(responseString.toString(), responseFormat, parentService); return; }