package com.jpeterson.littles3.bo; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import org.apache.commons.configuration.Configuration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Static implementation of <code>UserDirectory</code> that will return the same * AWSSecretAccessKey for any AWSAccessKeyId. * * @author Jesse Peterson */ public class FileUserDirectory implements UserDirectory { public static final String CONFIG_USER_FILE = "user.file"; public static final int INDEX_AWS_ACCESS_KEY_ID = 0; public static final int INDEX_AWS_SECRET_ACCESS_KEY = 1; public static final int INDEX_USERNAME = 2; public static final int INDEX_DISPLAY_NAME = 3; private Configuration configuration; private Log logger; public FileUserDirectory() { logger = LogFactory.getLog(this.getClass()); } public String getAwsSecretAccessKey(String awsAccessKeyId) { String[] components; components = findComponents(awsAccessKeyId); if (components == null) { // no information found for the awsAccessKeyId return null; } return components[INDEX_AWS_SECRET_ACCESS_KEY]; } public CanonicalUser getCanonicalUser(String awsAccessKeyId) { CanonicalUser user; String[] components; components = findComponents(awsAccessKeyId); if (components == null) { // no information found for the awsAccessKeyId return null; } user = new CanonicalUser(components[INDEX_USERNAME]); user.setDisplayName(components[INDEX_DISPLAY_NAME]); return user; } private String[] findComponents(String awsAccessKeyId) { BufferedReader in = null; String userFile = configuration.getString(CONFIG_USER_FILE); File file = new File(userFile); try { in = new BufferedReader(new FileReader(file)); String line; while ((line = in.readLine()) != null) { line = line.trim(); if (line.startsWith("#")) { // comment } else { String[] components = line.split(","); if (components[INDEX_AWS_ACCESS_KEY_ID] .equals(awsAccessKeyId)) { return components; } } } } catch (FileNotFoundException e) { logger.error("Could not open configured user file: " + userFile, e); } catch (IOException e) { logger.error("Error reading user file: " + userFile, e); } finally { if (in != null) { try { in.close(); } catch (IOException e) { // ignore } } } return null; } public Configuration getConfiguration() { return configuration; } public void setConfiguration(Configuration configuration) { this.configuration = configuration; } }