/**
* Copyright (c) Istituto Nazionale di Fisica Nucleare (INFN). 2006-2016
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.glite.security.voms.admin.persistence.deployer;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Properties;
import java.util.Scanner;
import org.glite.security.voms.admin.configuration.VOMSConfiguration;
import org.glite.security.voms.admin.configuration.VOMSConfigurationConstants;
import org.glite.security.voms.admin.persistence.HibernateFactory;
import org.glite.security.voms.admin.persistence.dao.VOMSUserDAO;
import org.glite.security.voms.admin.persistence.dao.generic.DAOFactory;
import org.glite.security.voms.admin.persistence.model.VOMSUser;
import org.glite.security.voms.admin.util.SysconfigUtil;
import org.hibernate.dialect.Dialect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class BulkUserLoader implements Runnable {
public static final Logger log = LoggerFactory
.getLogger(BulkUserLoader.class);
final String vo;
final String userFile;
protected Dialect dialect;
private void printUsageAndExit() {
System.err.println("usage: BulkUserLoader <vo> <userfile>");
System.exit(1);
}
private void logExceptionAndExit(Throwable t) {
log.error(t.getMessage(), t);
System.exit(1);
}
private void loadVOMSConfiguration() {
System.setProperty(VOMSConfigurationConstants.VO_NAME, vo);
VOMSConfiguration.load(null);
}
private String getVOConfigurationDir() {
Properties sysconfProps = SysconfigUtil.loadSysconfig();
String confDir = sysconfProps.getProperty(SysconfigUtil.SYSCONFIG_CONF_DIR);
if (confDir == null)
confDir = "/etc/voms-admin";
return confDir;
}
private void checkVoExistence() {
if (!isVoConfigured(vo)) {
log.error("VO {} is not configured on this host.", vo);
System.exit(1);
}
}
private boolean isVoConfigured(String voName) {
String confDir = getVOConfigurationDir();
File voConfDir = new File(confDir + "/" + voName);
if (voConfDir.exists() && voConfDir.isDirectory())
return true;
return false;
}
public BulkUserLoader(String[] args) {
if (args.length != 2) {
printUsageAndExit();
}
vo = args[0];
userFile = args[1];
}
public static void main(String[] args) {
new BulkUserLoader(args).run();
}
@Override
public void run() {
loadVOMSConfiguration();
checkVoExistence();
HibernateFactory.beginTransaction();
VOMSUserDAO dao = VOMSUserDAO.instance();
Scanner scanner = null;
try {
scanner = new Scanner(new File(userFile));
while (scanner.hasNext()) {
String line = scanner.nextLine();
String[] tokens = line.split(",");
VOMSUser u = new VOMSUser();
u.setName(tokens[1]);
u.setSurname(tokens[2]);
u.setAddress("(undefined)");
u.setEmailAddress(tokens[4]);
u.setPhoneNumber(tokens[5]);
u.setDn(String.format("/C=IT/O=IGI/CN=%s", tokens[3]));
dao.create(u, "/C=IT/O=IGI/CN=Test CA");
// Create AUP signature record
dao.signAUP(u, DAOFactory.instance().getAUPDAO().getVOAUP());
log.info("Created {}", u.getShortName());
}
} catch (FileNotFoundException e) {
logExceptionAndExit(e);
} finally {
if (scanner != null) {
scanner.close();
}
}
HibernateFactory.commitTransaction();
}
}