package org.xdams.security;
import org.springframework.dao.DataAccessException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.xdams.security.load.LoadUser;
import org.xdams.security.load.LoadUserSpeedUp;
import org.xdams.user.bean.UserBean;
import org.xdams.utility.resource.ConfManager;
import org.xdams.xml.builder.XMLBuilder;
import org.xdams.xmlengine.connection.manager.ConnectionManager;
import org.xdams.xw.XWConnection;
public class UserDetailsServiceImpl implements UserDetailsService {
public static void main(String[] args) {
UserDetailsServiceImpl detailsServiceImpl = new UserDetailsServiceImpl();
detailsServiceImpl.loadUserByUsernameCompany("admin", "xdams.org", null);
}
private Assembler assembler;
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
try {
/*
* Users users = (Users)service.getListFromSQL(Users.class, "SELECT * FROM users where username='"+username+"';").get(0); if (users == null) throw new UsernameNotFoundException("user not found");
*/
return assembler.buildUserFromUserEntity(null);
} catch (IndexOutOfBoundsException e) {
throw new UsernameNotFoundException("user not found");
}
}
public UserDetails loadUserByUsernameCompany(String username, String account, AuthenticationType authenticationType) throws UsernameNotFoundException, DataAccessException {
try {
/*
* Users users = (Users)service.getListFromSQL(Users.class, "SELECT * FROM users where username='"+username+"' and ref_id_company="+company+";").get(0); if (users == null) throw new UsernameNotFoundException("user not found");
*/
UserBean userBean = null;
try {
// System.out.println("UserDetailsServiceImpl.loadUserByUsernameCompany() username:"+username);
// System.out.println("UserDetailsServiceImpl.loadUserByUsernameCompany() account:"+account);
if (authenticationType.getLoadUserType() == null || authenticationType.getLoadUserType().equals("xDams-basic")) {
if (authenticationType.isLoadUserSpeedUp()) {
String xmlUsers = ConfManager.getConfString(account + "-security/users.xml");
String xmlArchives = ConfManager.getConfString(account + "-security/accounts.xml");
String xmlrole = ConfManager.getConfString(account + "-security/role.xml");
userBean = LoadUserSpeedUp.loadUserByString(xmlUsers, xmlArchives, xmlrole, username, account);
} else {
XMLBuilder xmlUsers = ConfManager.getConfXML(account + "-security/users.xml");
XMLBuilder xmlArchives = ConfManager.getConfXML(account + "-security/accounts.xml");
XMLBuilder xmlrole = ConfManager.getConfXML(account + "-security/role.xml");
userBean = LoadUser.loadUser(xmlUsers, xmlArchives, xmlrole, username, account);
}
} else if ((authenticationType.getLoadUserType() != null) && (authenticationType.getLoadUserType().equals("xDams-xway"))) {
XWConnection xwconn = null;
ConnectionManager connectionManager = new ConnectionManager();
try {
xwconn = connectionManager.getConnection(authenticationType.getArchiveXWAY());
String queryUser = "([XML,/user/@id]=\""+username+"\") AND ([XML,/user/@account]=\""+account+"\") OR ([XML,/account/@id]=\"" + account + "\")";
String[] recordsXML = xwconn.select(queryUser);
String xmlUsers = "";
String xmlArchives = "";
for (int i = 0; i < recordsXML.length; i++) {
if (recordsXML[i].indexOf("<user") != -1) {
xmlUsers = recordsXML[i];
} else if (recordsXML[i].indexOf("<account") != -1) {
xmlArchives = recordsXML[i];
}
}
String xmlrole = ConfManager.getConfString(account + "-security/role.xml");
userBean = LoadUserSpeedUp.loadUserByString(xmlUsers, xmlArchives, xmlrole, username, account);
} catch (Exception e) {
e.printStackTrace();
throw new UsernameNotFoundException("user not found");
} finally {
connectionManager.closeConnection(xwconn);
}
} else {
throw new UsernameNotFoundException("user not found");
}
if (userBean == null)
throw new UsernameNotFoundException("user not found");
return assembler.buildUserFromUserEntity(userBean);
} catch (Exception e) {
throw new UsernameNotFoundException("user not found");
}
} catch (IndexOutOfBoundsException e) {
throw new UsernameNotFoundException("user not found");
}
}
public UserDetails loadUserFromSSO(String username) throws UsernameNotFoundException, DataAccessException {
try {
/*
* Users users = (Users)service.getListFromSQL(Users.class, "SELECT * FROM users where username='"+username+"'").get(0); if (users == null) throw new UsernameNotFoundException("user not found");
*/
return assembler.buildUserFromUserEntity(null);
} catch (IndexOutOfBoundsException e) {
throw new UsernameNotFoundException("user not found");
}
}
public void setAssembler(Assembler assembler) {
this.assembler = assembler;
}
}