1 17 package org.pentaho.core.util; 18 19 import java.io.File ; 20 import java.io.FileNotFoundException ; 21 import java.io.IOException ; 22 import java.security.MessageDigest ; 23 24 import org.apache.commons.httpclient.Credentials; 25 import org.apache.commons.httpclient.HttpClient; 26 import org.apache.commons.httpclient.HttpException; 27 import org.apache.commons.httpclient.HttpStatus; 28 import org.apache.commons.httpclient.UsernamePasswordCredentials; 29 import org.apache.commons.httpclient.auth.AuthScope; 30 import org.apache.commons.httpclient.methods.PostMethod; 31 import org.apache.commons.httpclient.methods.multipart.FilePart; 32 import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity; 33 import org.apache.commons.httpclient.methods.multipart.Part; 34 import org.dom4j.Document; 35 import org.dom4j.Node; 36 import org.pentaho.core.admin.datasources.DataSourceInfo; 37 import org.pentaho.core.repository.ISolutionRepository; 38 import org.pentaho.core.system.PentahoSystem; 39 import org.pentaho.messages.Messages; 40 41 public class PublisherUtil { 42 46 private static final String PublishConfigFile = "publisher_config.xml"; 48 61 public static int publish(String publishURL, String publishPath, File publishFiles[], String publishPassword, boolean overwrite) { 62 return publish(publishURL, publishPath, publishFiles, null, publishPassword, null, null, overwrite); 63 } 64 65 82 public static int publish(String publishURL, String publishPath, File publishFiles[], String publishPassword, String serverUserid, String serverPassword, boolean overwrite) { 83 return publish(publishURL, publishPath, publishFiles, null, publishPassword, serverUserid, serverPassword, overwrite); 84 } 85 86 101 public static int publish(String publishURL, String publishPath, File publishFiles[], DataSourceInfo dataSource, String publishPassword, boolean overwrite) { 102 return publish(publishURL, publishPath, publishFiles, dataSource, publishPassword, null, null, overwrite); 103 } 104 105 124 public static int publish(String publishURL, String publishPath, File publishFiles[], DataSourceInfo dataSource, String publishPassword, String serverUserid, String serverPassword, boolean overwrite) { 125 int status = -1; 126 System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog"); System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true"); System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire.header", "warn"); System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "warn"); 131 String fullURL = publishURL + "?publishPath=" + publishPath; if (publishPassword == null) { 133 throw new IllegalArgumentException (Messages.getErrorString("PUBLISHERUTIL.ERROR_0001_PUBLISHPASSWORDREQUIRED")); } 135 136 fullURL += "&publishKey=" + getPasswordKey(publishPassword); fullURL += "&overwrite=" + overwrite; 139 if (dataSource != null) { 140 fullURL += "&jndiName=" + dataSource.getName(); fullURL += "&jdbcDriver=" + dataSource.getDriver(); fullURL += "&jdbcUrl=" + dataSource.getUrl(); fullURL += "&jdbcUserId=" + dataSource.getUserId(); fullURL += "&jdbcPassword=" + dataSource.getPassword(); } 146 PostMethod filePost = new PostMethod(fullURL); 147 Part[] parts = new Part[publishFiles.length]; 148 for (int i = 0; i < publishFiles.length; i++) { 149 try { 150 parts[i] = new FilePart(publishFiles[i].getName(), publishFiles[i]); 151 } catch (FileNotFoundException e) { 152 e.printStackTrace(); 154 } 155 } 156 filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams())); 157 HttpClient client = new HttpClient(); 158 try { 159 if ((serverUserid != null) && (serverUserid.length() > 0) && (serverPassword != null) && (serverPassword.length() > 0)) { 162 Credentials creds = new UsernamePasswordCredentials(serverUserid, serverPassword); 163 client.getState().setCredentials(AuthScope.ANY, creds); 164 client.getParams().setAuthenticationPreemptive(true); 165 } 166 status = client.executeMethod(filePost); 167 168 if (status == HttpStatus.SC_OK) { 169 String postResult = filePost.getResponseBodyAsString(); 170 171 if (postResult != null) { 172 try { 173 return Integer.parseInt(postResult.trim()); 174 } catch (NumberFormatException e) { 175 e.printStackTrace(); 176 return ISolutionRepository.FILE_ADD_INVALID_USER_CREDENTIALS; 177 } 178 } 179 } else if (status == HttpStatus.SC_UNAUTHORIZED) { 180 return ISolutionRepository.FILE_ADD_INVALID_USER_CREDENTIALS; 181 } 182 } catch (HttpException e) { 183 e.printStackTrace(); 185 } catch (IOException e) { 186 e.printStackTrace(); 188 } catch (Exception e) { 189 e.printStackTrace(); 190 } 191 return ISolutionRepository.FILE_ADD_FAILED; 193 } 194 195 202 public static final String getPasswordKey(String passWord) { 203 try { 204 MessageDigest md = MessageDigest.getInstance("MD5"); md.reset(); md.update(passWord.getBytes()); byte[] digest = md.digest("P3ntah0Publ1shPa55w0rd".getBytes()); StringBuffer buf = new StringBuffer (); 211 String s; 212 for (int i = 0; i < digest.length; i++) { 213 s = Integer.toHexString(0xFF & digest[i]); 214 buf.append((s.length() == 1) ? "0" : "").append(s); } 216 return buf.toString(); } catch (Exception ex) { 218 ex.printStackTrace(); 219 } 220 return null; 221 } 222 223 230 public static final boolean checkPublisherKey(String key) { 231 if (key != null) { 232 Document doc = PentahoSystem.getSystemSettings().getSystemSettingsDocument(PublishConfigFile); 233 if (doc != null) { 234 Node node = doc.selectSingleNode("//publisher-config/publisher-password"); if (node != null) { 236 String setting = node.getText(); 237 if ((setting != null) && (setting.length() > 0)) { 238 String pubKey = getPasswordKey(setting); 239 return pubKey.equals(key); 240 } 241 } 242 } 243 } 244 return false; 245 } 246 247 } 248 | Popular Tags |