package config;
import org.openntf.domino.*;
import com.ibm.commons.util.StringUtil;
import com.ibm.designer.runtime.directory.DirectoryUser;
import com.ibm.xsp.extlib.util.ExtLibUtil;
import com.ibm.xsp.model.DataObject;
import frostillicus.xsp.bean.ApplicationScoped;
import frostillicus.xsp.bean.ManagedBean;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
import frostillicus.xsp.util.FrameworkUtils;
import lotus.domino.NotesException;
@ManagedBean(name="userInfo")
@ApplicationScoped
public class UserInfo implements Serializable {
private static final long serialVersionUID = 1L;
public static UserInfo get() {
UserInfo instance = (UserInfo)FrameworkUtils.resolveVariable(UserInfo.class.getAnnotation(ManagedBean.class).name());
return instance == null ? new UserInfo() : instance;
}
public boolean isAdmin() {
return FrameworkUtils.getDatabase().queryAccessRoles(getName()).contains("[Admin]");
}
public boolean isDebug() {
return FrameworkUtils.getDatabase().queryAccessRoles(getName()).contains("[Debug]");
}
public String getName() {
return FrameworkUtils.getUserName();
}
@SuppressWarnings("unchecked")
public Collection<String> getNamesList() throws NotesException {
Database database = FrameworkUtils.getDatabase();
Collection<String> names = new TreeSet<String>(new lotus.notes.addins.DominoServer(database.getServer()).getNamesList(FrameworkUtils.getUserName()));
names.addAll(database.queryAccessRoles(getName()));
return names;
}
public String getDisplayName() {
DirectoryUser user = ExtLibUtil.getXspContext().getUser();
List<?> names = FrameworkUtils.getSession().evaluate(" @NameLookup([NoUpdate]; '" + user.getName() + "'; 'FirstName')[1]:@NameLookup([NoUpdate]; '" + user.getName() + "'; 'LastName')[1] ");
String firstName = names.size() < 1 ? "" : names.get(0).toString();
String lastName = names.size() < 2 ? "" : names.get(1).toString();
if(StringUtil.isNotEmpty(firstName)) {
if(StringUtil.isNotEmpty(lastName)) {
if(lastName.length() > 1) {
return firstName + " " + lastName.charAt(0) + ".";
}
return firstName + " " + lastName;
}
return firstName;
}
return user.getCommonName();
}
public String getProfileImageUrl() {
DirectoryUser user = ExtLibUtil.getXspContext().getUser();
String email = user.getMail();
return "https://secure.gravatar.com/avatar/" + MD5Util.md5Hex(email);
}
public ProfileImages getProfileImages() {
return ProfileImages.INSTANCE;
}
public static enum ProfileImages implements DataObject {
INSTANCE;
public Class<DataObject> getType(final Object key) {
return DataObject.class;
}
public DataObject getValue(final Object key) {
return new DataObject() {
public Class<String> getType(final Object key2) {
return String.class;
}
public String getValue(final Object key2) {
return "https://secure.gravatar.com/avatar/" + MD5Util.md5Hex(String.valueOf(key)) + "?s=" + key2;
}
public boolean isReadOnly(final Object key2) {
return true;
}
public void setValue(final Object key2, final Object value2) {
throw new UnsupportedOperationException();
}
};
}
public boolean isReadOnly(final Object key) {
return true;
}
public void setValue(final Object key, final Object value) {
throw new UnsupportedOperationException();
}
}
}
class MD5Util {
public static String hex(final byte[] array) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i]
& 0xFF) | 0x100).substring(1,3));
}
return sb.toString();
}
public static String md5Hex (final String message) {
try {
MessageDigest md =
MessageDigest.getInstance("MD5");
return hex (md.digest(message.getBytes("CP1252")));
} catch (NoSuchAlgorithmException e) {
} catch (UnsupportedEncodingException e) {
}
return null;
}
}