package com.idega.core.accesscontrol.data;
/*
*Copyright 2000 idega.is All Rights Reserved.
*/
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Collection;
import javax.ejb.FinderException;
import com.idega.data.GenericEntity;
import com.idega.data.IDOQuery;
import com.idega.user.data.Group;
import com.idega.user.data.User;
import com.idega.user.data.UserBMPBean;
public class LoginTableBMPBean extends com.idega.data.GenericEntity implements com.idega.core.accesscontrol.data.LoginTable,com.idega.util.EncryptionType {
public static String className = LoginTable.class.getName();
public static String _COLUMN_PASSWORD = "USR_PASSWORD";
private static final String ENTITY_NAME = "IC_LOGIN";
private static final String COLUMN_USER_LOGIN = "USER_LOGIN";
private static final String COLUMN_USER_PASSWORD = "USER_PASSWORD";
private static final String COLUMN_LAST_CHANGED = "LAST_CHANGED";
private static final String COLUMN_LOGIN_TYPE = "LOGIN_TYPE";
private static final String COLUMN_CHANGED_BY_USER = "CHANGED_BY_USER_ID";
private static final String COLUMN_CHANGED_BY_GROUP = "CHANGED_BY_GROUP_ID";
private transient String unEncryptedUserPassword;
public LoginTableBMPBean(){
super();
}
public LoginTableBMPBean(int id)throws SQLException{
super(id);
}
public void initializeAttributes(){
addAttribute(this.getIDColumnName());
addAttribute(getColumnNameUserID(), "User id", true, true, Integer.class, "many-to-one", User.class);
addAttribute(getUserLoginColumnName(), "User name", true, true, String.class, 32);
addAttribute(getNewUserPasswordColumnName(), "Password (encrypted)", true, true, String.class, 255);
// deprecated column
addAttribute(getOldUserPasswordColumnName(), "Password (deprecated)", true, true, String.class, 20);
addAttribute(getLastChangedColumnName(), "Last changed", true, true, Timestamp.class);
addAttribute(getLoginTypeColumnName(), "Login type", true, true, String.class, 32);
addAttribute(COLUMN_CHANGED_BY_USER, "Last changed by user id", true, true, Integer.class, "many-to-one", User.class);
addAttribute(COLUMN_CHANGED_BY_GROUP, "Last changed by group id", true, true, Integer.class, "many-to-one", Group.class);
setNullable(getUserLoginColumnName(), false);
setUnique(getUserLoginColumnName(), true);
addIndex("IDX_LOGIN_REC_2", getUserIDColumnName());
addIndex("IDX_LOGIN_REC_3", new String[]{getUserIDColumnName(), getLoginTypeColumnName()});
addIndex("IDX_LOGIN_REC_4", new String[]{getUserIDColumnName(), getUserLoginColumnName()});
addIndex("IDX_LOGIN_REC_5", getUserLoginColumnName());
}
public void setDefaultValues(){
setColumn(getOldUserPasswordColumnName(),"rugl");
}
public String getEntityName(){
return ENTITY_NAME;
}
public static String getUserLoginColumnName(){
return COLUMN_USER_LOGIN;
}
public static String getOldUserPasswordColumnName(){
return COLUMN_USER_PASSWORD;
}
public static String getNewUserPasswordColumnName(){
return _COLUMN_PASSWORD;
}
public static String getLastChangedColumnName() {
return COLUMN_LAST_CHANGED;
}
public static String getLoginTypeColumnName() {
return COLUMN_LOGIN_TYPE;
}
public static String getUserPasswordColumnName(){
System.out.println("LoginTable - getUserPassordColumnName()");
System.out.println("caution: not save because of changes in entity");
Exception e = new Exception();
e.printStackTrace();
return _COLUMN_PASSWORD;
}
public static String getColumnNameUserID(){
return UserBMPBean.getColumnNameUserID();
}
/* public void insertStartData() throws SQLException {
LoginTable login = ((com.idega.core.accesscontrol.data.LoginTableHome)com.idega.data.IDOLookup.getHomeLegacy(LoginTable.class)).createLegacy();
LoginInfo li = ((com.idega.core.accesscontrol.data.LoginInfoHome)com.idega.data.IDOLookup.getHomeLegacy(LoginInfo.class)).createLegacy();
List user = EntityFinder.findAllByColumn(com.idega.core.user.data.UserBMPBean.getStaticInstance(), com.idega.core.user.data.UserBMPBean.getColumnNameFirstName(),com.idega.core.user.data.UserBMPBean.getAdminDefaultName());
User adminUser = null;
if(user != null){
adminUser = ((User)user.get(0));
}else{
adminUser = ((com.idega.core.user.data.UserHome)com.idega.data.IDOLookup.getHomeLegacy(User.class)).createLegacy();
adminUser.setFirstName(com.idega.core.user.data.UserBMPBean.getAdminDefaultName());
adminUser.insert();
}
try {
/*
login.setUserId(adminUser.getID());
login.setUserLogin(com.idega.core.user.data.UserBMPBean.getAdminDefaultName());
login.setUserPassword("idega");
login.insert();
li.setID(login.getID());
li.insert();
*/
/* LoginDBHandler.createLogin(adminUser.getID(), com.idega.core.user.data.UserBMPBean.getAdminDefaultName(), "idega", Boolean.TRUE, null, -1, Boolean.FALSE, Boolean.TRUE, Boolean.TRUE, EncryptionType.MD5);
}
catch (Exception ex) {
System.err.println(ex.getMessage());
ex.printStackTrace();
throw new SQLException("Login Not created");
}
AccessControl control = new AccessControl();
GenericGroup group = com.idega.core.accesscontrol.data.PermissionGroupBMPBean.getStaticPermissionGroupInstance().findGroup(AccessControl.getAdministratorGroupName());
if(group != null){
control.addUserToPermissionGroup((PermissionGroup)group,adminUser.getID());
}else{
int[] userId = new int[1];
userId[0] = adminUser.getID();
control.createPermissionGroup(AccessControl.getAdministratorGroupName(),null,null,userId,null);
}
}
*/
public static LoginTable getStaticInstance(){
return (LoginTable)GenericEntity.getStaticInstance(LoginTable.class);
}
/**
* just sets the password column value as this string without encoding.
*/
public void setUserPasswordInClearText(String password){
setColumn(getNewUserPasswordColumnName(), password);
}
/**
* just returns the password column value as is.
*/
public String getUserPasswordInClearText(){
return getStringColumnValue(getNewUserPasswordColumnName());
}
public String getUserPassword(){
String str = null;
try {
str = getStringColumnValue(getNewUserPasswordColumnName());
}
catch (Exception ex) {
ex.printStackTrace();
// str = null;
}
if(str == null){
try {
String oldPass = getStringColumnValue(getOldUserPasswordColumnName());
if(oldPass != null){
char[] pass = new char[oldPass.length()/2];
try {
for (int i = 0; i < pass.length; i++) {
pass[i] = (char)Integer.decode("0x"+oldPass.charAt(i*2)+oldPass.charAt((i*2)+1)).intValue();
}
oldPass = String.valueOf(pass);
}
catch (Exception ex) {
ex.printStackTrace();
// oldPass = oldPass;
}
LoginTable table = ((com.idega.core.accesscontrol.data.LoginTableHome)com.idega.data.IDOLookup.getHomeLegacy(LoginTable.class)).findByPrimaryKeyLegacy(this.getID());
table.setUserPassword(oldPass);
table.update();
this.setUserPassword(oldPass);
return oldPass;
//this.setColumnAsNull(getOldUserPasswordColumnName());
}
}
catch (Exception ex) {
ex.printStackTrace();
return getStringColumnValue(getOldUserPasswordColumnName());
}
}
if(str != null){
char[] pass = new char[str.length()/2];
try {
for (int i = 0; i < pass.length; i++) {
pass[i] = (char)Integer.decode("0x"+str.charAt(i*2)+str.charAt((i*2)+1)).intValue();
}
return String.valueOf(pass);
}
catch (Exception ex) {
ex.printStackTrace();
return str;
}
}
return str;
}
public void setUserPassword(String userPassword){
try {
String str = "";
char[] pass = userPassword.toCharArray();
for (int i = 0; i < pass.length; i++) {
String hex = Integer.toHexString(pass[i]);
while (hex.length() < 2) {
String s = "0";
s += hex;
hex = s;
}
str += hex;
}
if(str.equals("") && !userPassword.equals("")){
str = null;
}
setColumn(getNewUserPasswordColumnName(), str);
}
catch (Exception ex) {
ex.printStackTrace();
setColumn(getNewUserPasswordColumnName(), userPassword);
}
}
public void setUserLogin(String userLogin) {
setColumn(getUserLoginColumnName(), userLogin);
}
public String getUserLogin() {
return getStringColumnValue(getUserLoginColumnName());
}
public int getUserId(){
return getIntColumnValue(getUserIDColumnName());
}
public User getUser(){
return (User)getColumnValue(getUserIDColumnName());
}
public void setUserId(Integer userId){
setColumn(getUserIDColumnName(), userId);
}
public void setUserId(int userId) {
setColumn(getUserIDColumnName(),userId);
}
public static String getUserIDColumnName(){
return UserBMPBean.getColumnNameUserID();
}
public void setLastChanged(Timestamp when) {
setColumn(getLastChangedColumnName(),when);
}
public Timestamp getLastChanged() {
return((Timestamp)getColumnValue(getLastChangedColumnName()));
}
public void setChangedByGroup(Group group){
setColumn(COLUMN_CHANGED_BY_GROUP, group);
}
public void setChangedByGroupId(int changedByGroupId){
setColumn(COLUMN_CHANGED_BY_GROUP, changedByGroupId);
}
public int getChangedByGroupId(){
return getIntColumnValue(COLUMN_CHANGED_BY_GROUP);
}
public Group getChangedByGroup(){
return (Group) getColumnValue(COLUMN_CHANGED_BY_GROUP);
}
public void setChangedByUser(User changedByUser){
setColumn(COLUMN_CHANGED_BY_USER, changedByUser);
}
public void setChangedByUserId(int changedByUserId){
setColumn(COLUMN_CHANGED_BY_USER, changedByUserId);
}
public int getChangedByUserId(){
return getIntColumnValue(COLUMN_CHANGED_BY_USER);
}
public User getChangedByUser(){
return (User) getColumnValue(COLUMN_CHANGED_BY_USER);
}
/**
* Sets both the intented encrypted password and the original unencrypted password for temporary retrieval
*/
public void setUserPassword(String encryptedPassword,String unEncryptedPassword){
this.unEncryptedUserPassword=unEncryptedPassword;
this.setUserPassword(encryptedPassword);
}
/**
* Gets the original password if the record is newly created, therefore it can be retrieved , if this is not a newly created record the exception PasswordNotKnown is thrown
*/
public String getUnencryptedUserPassword()throws PasswordNotKnown{
if(this.unEncryptedUserPassword==null){
throw new PasswordNotKnown(this.getUserLogin());
}
else{
return this.unEncryptedUserPassword;
}
}
public void setLoginType(String loginType) {
setColumn(getLoginTypeColumnName(), loginType);
}
public String getLoginType() {
return getStringColumnValue(getLoginTypeColumnName());
}
public Collection ejbFindLoginsForUser(com.idega.core.user.data.User user) throws FinderException{
IDOQuery query = idoQuery();
query.appendSelectAllFrom(this);
query.appendWhereEquals(getColumnNameUserID(),user.getPrimaryKey());
return idoFindPKsByQuery(query);
}
}