/sun/hostadmiral/trunk/src/ak/hostadmiral/core/action/LoginAction.java |
---|
3,6 → 3,7 |
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
import org.apache.struts.Globals; |
import org.apache.struts.action.Action; |
import org.apache.struts.action.ActionMapping; |
import org.apache.struts.action.ActionForm; |
39,6 → 40,7 |
} |
else { |
request.getSession().setAttribute("user", user); |
request.getSession().setAttribute(Globals.LOCALE_KEY, user.getLocale()); |
String origin = BackPath.findBackPath(request).getBackwardUrl(); |
if(origin == null || origin.length() <= 0) { |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/action/UserAction.java |
---|
89,6 → 89,7 |
if(u.getBoss() != null) |
showForm.set("boss", StringConverter.toString(u.getBoss().getId())); |
showForm.set("superuser", u.getSuperuser()); |
showForm.set("locale", u.getLocale().toString()); |
showForm.set("enabled", u.getEnabled()); |
showForm.set("comment", u.getComment()); |
} |
100,6 → 101,18 |
else |
return mapping.findForward("view"); |
} |
else if("partedit".equals(mapping.getParameter())) { |
DynaActionForm theForm = (DynaActionForm)form; |
Long userId = StringConverter.parseLong(theForm.get("id")); |
User u = UserManager.getInstance().get(user, userId); |
DynaActionForm showForm = (DynaActionForm)RequestUtilsX.populateActionForm( |
this, request, "ak.hostadmiral.core.form.UserPartEditForm"); |
showForm.set("locale", u.getLocale().toString()); |
initUserList(request, user); |
request.setAttribute("u", u); |
return mapping.findForward("default"); |
} |
else if("deleting".equals(mapping.getParameter())) { |
DynaActionForm theForm = (DynaActionForm)form; |
Long userId = StringConverter.parseLong(theForm.get("id")); |
163,6 → 176,7 |
else |
u.setBoss(user, UserManager.getInstance().get(user, bossId)); |
u.setLocaleName(user, (String)theForm.get("locale")); |
u.setEnabled(user, (Boolean)theForm.get("enabled")); |
u.setComment(user, (String)theForm.get("comment")); |
} |
172,7 → 186,7 |
if(password != null && !password.equals("") |
&& u.editableBy(user) // more strong condition, because normal |
&& u.mayChangePassword(user)) // user have to enter first the old password |
&& u.partEditableBy(user)) // user have to enter first the old password |
{ |
u.setPassword(user, password); |
} |
181,6 → 195,16 |
response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl()); |
return null; |
} |
else if("partsubmit".equals(mapping.getParameter())) { |
DynaActionForm theForm = (DynaActionForm)form; |
Long userId = StringConverter.parseLong(theForm.get("id")); |
User u = UserManager.getInstance().get(user, userId); |
u.setLocaleName(user, (String)theForm.get("locale")); |
UserManager.getInstance().save(user, u); |
response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl()); |
return null; |
} |
else { |
throw new Exception("unknown mapping parameter"); |
} |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/CoreResources.properties |
---|
25,6 → 25,7 |
ak.hostadmiral.core.user.id.wrong=Please select an user from the list |
ak.hostadmiral.core.user.deletemeself=Can not delete the user you are logged in |
ak.hostadmiral.core.user.boss.id.wrong=Please select a boss from the list |
ak.hostadmiral.core.user.locale.wrong=Please select a locale from the list |
ak.hostadmiral.core.user.system.uid.nonunique=The UID already exists |
ak.hostadmiral.core.user.system.name.nonunique=The user name already exists |
ak.hostadmiral.core.domain.name.nonunique=The domain name already exists |
73,6 → 74,7 |
ak.hostadmiral.page.index.mail_box_list=mail boxes |
ak.hostadmiral.page.index.logout=logout |
ak.hostadmiral.page.index.login=Logged in as |
ak.hostadmiral.page.index.locale=Locale |
ak.hostadmiral.page.system.login.title=Host Admiral - login |
ak.hostadmiral.page.system.login.login=Login |
99,6 → 101,7 |
ak.hostadmiral.page.user.list.enabled=Enabled |
ak.hostadmiral.page.user.list.delete=delete |
ak.hostadmiral.page.user.list.edit=edit |
ak.hostadmiral.page.user.list.partedit=edit |
ak.hostadmiral.page.user.list.view=view |
ak.hostadmiral.page.user.list.add=add new user |
ak.hostadmiral.page.user.list.back=back |
128,6 → 131,7 |
ak.hostadmiral.page.user.edit.superuser=Superuser |
ak.hostadmiral.page.user.edit.superuser.true=yes |
ak.hostadmiral.page.user.edit.superuser.false=no |
ak.hostadmiral.page.user.edit.locale=Locale |
ak.hostadmiral.page.user.edit.enabled=Enabled |
ak.hostadmiral.page.user.edit.comment=Comment |
ak.hostadmiral.page.user.edit.submit=submit |
141,6 → 145,7 |
ak.hostadmiral.page.user.view.superuser=Superuser |
ak.hostadmiral.page.user.view.superuser.true=yes |
ak.hostadmiral.page.user.view.superuser.false=no |
ak.hostadmiral.page.user.view.locale=Locale |
ak.hostadmiral.page.user.view.enabled=Enabled |
ak.hostadmiral.page.user.view.enabled.true=yes |
ak.hostadmiral.page.user.view.enabled.false=no |
148,6 → 153,22 |
ak.hostadmiral.page.user.view.back=back |
ak.hostadmiral.page.user.view.logins=login history |
ak.hostadmiral.page.user.partedit.title=Host Admiral - user - edit |
ak.hostadmiral.page.user.partedit.login=Login |
ak.hostadmiral.page.user.partedit.boss=Boss |
ak.hostadmiral.page.user.partedit.boss.empty=[no boss] |
ak.hostadmiral.page.user.partedit.superuser=Superuser |
ak.hostadmiral.page.user.partedit.superuser.true=yes |
ak.hostadmiral.page.user.partedit.superuser.false=no |
ak.hostadmiral.page.user.partedit.locale=Locale |
ak.hostadmiral.page.user.partedit.enabled=Enabled |
ak.hostadmiral.page.user.partedit.enabled.true=yes |
ak.hostadmiral.page.user.partedit.enabled.false=no |
ak.hostadmiral.page.user.partedit.comment=Comment |
ak.hostadmiral.page.user.partedit.submit=submit |
ak.hostadmiral.page.user.partedit.back=back |
ak.hostadmiral.page.user.partedit.logins=login history |
ak.hostadmiral.page.user.system.list.title=Host Admiral - system users - list |
ak.hostadmiral.page.user.system.list.uid=System ID |
ak.hostadmiral.page.user.system.list.name=User name |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/InetDomainManager.java |
---|
26,7 → 26,7 |
registered = true; |
try { |
HibernateUtil.getConfiguration().addResource( |
"/ak/hostadmiral/core/model/InetDomain.hbm.xml"); |
"ak/hostadmiral/core/model/InetDomain.hbm.xml"); |
inetDomainManager = new InetDomainManager(); |
} |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailboxManager.java |
---|
29,7 → 29,7 |
registered = true; |
try { |
HibernateUtil.getConfiguration().addResource( |
"/ak/hostadmiral/core/model/Mailbox.hbm.xml"); |
"ak/hostadmiral/core/model/Mailbox.hbm.xml"); |
mailboxManager = new MailboxManager(); |
} |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailAliasManager.java |
---|
18,7 → 18,7 |
registered = true; |
try { |
HibernateUtil.getConfiguration().addResource( |
"/ak/hostadmiral/core/model/MailAlias.hbm.xml"); |
"ak/hostadmiral/core/model/MailAlias.hbm.xml"); |
} |
catch(Exception ex) { |
ex.printStackTrace(); |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/MailAliasDestinationManager.java |
---|
17,7 → 17,7 |
registered = true; |
try { |
HibernateUtil.getConfiguration().addResource( |
"/ak/hostadmiral/core/model/MailAliasDestination.hbm.xml"); |
"ak/hostadmiral/core/model/MailAliasDestination.hbm.xml"); |
} |
catch(Exception ex) { |
ex.printStackTrace(); |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/UserManager.java |
---|
26,9 → 26,9 |
registered = true; |
try { |
HibernateUtil.getConfiguration().addResource( |
"/ak/hostadmiral/core/model/User.hbm.xml"); |
"ak/hostadmiral/core/model/User.hbm.xml"); |
HibernateUtil.getConfiguration().addResource( |
"/ak/hostadmiral/core/model/UserLogin.hbm.xml"); |
"ak/hostadmiral/core/model/UserLogin.hbm.xml"); |
userManager = new UserManager(); |
} |
44,6 → 44,7 |
} |
private Collection beforeDeleteListeners = new ArrayList(); |
private Map loggedinUsers = new WeakHashMap(); |
private UserManager() |
{ |
128,7 → 129,7 |
public void save(User editor, User user) |
throws ModelException |
{ |
if(!user.editableBy(editor) && !user.mayChangePassword(editor) |
if(!user.editableBy(editor) && !user.partEditableBy(editor) |
&& !user.mayChangeSuperuser(editor)) |
{ |
throw new ModelSecurityException(); |
143,7 → 144,14 |
{ |
throw new ModelException(ex); |
} |
// update user if he is logged in |
for(Iterator i = loggedinUsers.keySet().iterator(); i.hasNext(); ) { |
User u = (User)i.next(); |
if(u.equals(user)) |
u.update(user); |
} |
} |
public void addBeforeDeleteListener(UserBeforeDeleteListener listener) |
{ |
242,11 → 250,14 |
throw new ModelException(ex); |
} |
if(success) |
if(success) { |
loggedinUsers.put(user, Boolean.TRUE); |
return user; |
else |
} |
else { |
return null; // wrong login or password |
} |
} |
public Collection listFailedLogins(User editor) |
throws ModelException |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/SystemUserManager.java |
---|
26,7 → 26,7 |
registered = true; |
try { |
HibernateUtil.getConfiguration().addResource( |
"/ak/hostadmiral/core/model/SystemUser.hbm.xml"); |
"ak/hostadmiral/core/model/SystemUser.hbm.xml"); |
systemUserManager = new SystemUserManager(); |
} |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/model/User.java |
---|
2,6 → 2,8 |
import java.util.Collection; |
import java.util.Collections; |
import java.util.Locale; |
import java.util.StringTokenizer; |
import ak.hostadmiral.util.Digest; |
import ak.hostadmiral.util.ModelException; |
18,6 → 20,7 |
private String password; |
private User boss; |
private Boolean superuser; |
private Locale locale = Locale.getDefault(); |
private Collection loginHistory; |
protected User() |
64,7 → 67,7 |
public void setPassword(User editor, String password) |
throws ModelException |
{ |
if(!mayChangePassword(editor)) |
if(!partEditableBy(editor)) |
throw new ModelSecurityException(); |
if(password == null) |
139,6 → 142,57 |
/** |
* |
* @hibernate.property column="locale" |
*/ |
protected String getLocaleName() |
{ |
return locale.toString(); |
} |
protected void setLocaleName(String localeName) |
{ |
String language = null; |
String country = null; |
if(localeName != null) { |
StringTokenizer t = new StringTokenizer(localeName, "_"); |
if(t.hasMoreTokens()) language = t.nextToken(); |
if(t.hasMoreTokens()) country = t.nextToken(); |
} |
if(language == null) |
this.locale = Locale.getDefault(); |
else if(country == null) |
this.locale = new Locale(language); |
else |
this.locale = new Locale(language, country); |
} |
public void setLocaleName(User editor, String localeName) |
throws ModelException |
{ |
if(!partEditableBy(editor)) |
throw new ModelSecurityException(); |
setLocaleName(localeName); |
} |
public Locale getLocale() |
{ |
return locale; |
} |
public void setLocale(User editor, Locale locale) |
throws ModelException |
{ |
if(!partEditableBy(editor)) |
throw new ModelSecurityException(); |
this.locale = locale; |
} |
/** |
* |
* @hibernate.set lazy="true" |
* @hibernate.collection-key column="usr" |
* @hibernate.collection-one-to-many class="ak.hostadmiral.core.model.UserLogin" |
166,6 → 220,14 |
return (getId() != null) && (u.getId() != null) && (getId().equals(u.getId())); |
} |
protected void update(User origin) |
{ |
this.login = origin.login; |
this.boss = origin.boss; |
this.superuser = origin.superuser; |
this.locale = origin.locale; |
} |
public int hashCode() |
{ |
if(getId() == null) |
204,7 → 266,8 |
return !user.equals(this) && (user.isSuperuser() || user.equals(boss)); |
} |
public boolean mayChangePassword(User user) |
// editor is allowed to change some additional properties |
public boolean partEditableBy(User user) |
{ |
return user.isSuperuser() || user.equals(boss) || user.equals(this); |
} |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/taglib/LocaleOptionsTag.java |
---|
0,0 → 1,49 |
// based on jakarta struts taglib |
package ak.hostadmiral.core.taglib; |
import java.util.Locale; |
import javax.servlet.jsp.JspException; |
import org.apache.struts.taglib.html.Constants; |
import org.apache.struts.taglib.html.SelectTag; |
import org.apache.struts.taglib.html.OptionsTag; |
import org.apache.struts.util.MessageResources; |
import org.apache.struts.util.ResponseUtils; |
import ak.hostadmiral.core.Locales; |
import ak.hostadmiral.core.model.User; |
public class LocaleOptionsTag extends OptionsTag |
{ |
protected static MessageResources coreMessages = |
MessageResources.getMessageResources("ak.hostadmiral.core.CoreResources"); |
public int doEndTag() throws JspException |
{ |
SelectTag selectTag = (SelectTag) pageContext.getAttribute(Constants.SELECT_KEY); |
if (selectTag == null) { |
throw new JspException(messages.getMessage("optionsTag.select")); |
} |
User user = (User)pageContext.getSession().getAttribute("user"); |
if(user == null) throw new JspException("no user found"); |
Locale userLocale = user.getLocale(); |
StringBuffer sb = new StringBuffer(); |
Locale[] locales = Locales.getLocales(); |
for(int i = 0; i < locales.length; i++) { |
Locale locale = locales[i]; |
String stringValue = locale.toString(); |
String label = locale.getDisplayLanguage(userLocale); |
String country = locale.getDisplayCountry(userLocale); |
if(country != null && !country.equals("")) |
label += " / " + country; // FIXME: move the slash to JSP? |
addOption(sb, stringValue, label, selectTag.isMatched(stringValue)); |
} |
ResponseUtils.write(pageContext, sb.toString()); |
return EVAL_PAGE; |
} |
} |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/taglib/CountryTag.java |
---|
0,0 → 1,29 |
package ak.hostadmiral.core.taglib; |
import java.io.IOException; |
import javax.servlet.jsp.JspException; |
import javax.servlet.jsp.tagext.TagSupport; |
import ak.hostadmiral.core.model.User; |
public class CountryTag |
extends TagSupport |
{ |
public int doStartTag() |
throws JspException |
{ |
User user = (User)pageContext.getSession().getAttribute("user"); |
if(user == null) |
throw new JspException("no user found"); |
try { |
pageContext.getOut().print(user.getLocale().getDisplayCountry(user.getLocale())); |
} |
catch(IOException ex) { |
throw new JspException("Cannot write out: " + ex.getMessage()); |
} |
return SKIP_BODY; |
} |
} |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/taglib/LanguageTag.java |
---|
0,0 → 1,29 |
package ak.hostadmiral.core.taglib; |
import java.io.IOException; |
import javax.servlet.jsp.JspException; |
import javax.servlet.jsp.tagext.TagSupport; |
import ak.hostadmiral.core.model.User; |
public class LanguageTag |
extends TagSupport |
{ |
public int doStartTag() |
throws JspException |
{ |
User user = (User)pageContext.getSession().getAttribute("user"); |
if(user == null) |
throw new JspException("no user found"); |
try { |
pageContext.getOut().print(user.getLocale().getDisplayLanguage(user.getLocale())); |
} |
catch(IOException ex) { |
throw new JspException("Cannot write out: " + ex.getMessage()); |
} |
return SKIP_BODY; |
} |
} |
/sun/hostadmiral/trunk/src/ak/hostadmiral/core/Locales.java |
---|
0,0 → 1,17 |
package ak.hostadmiral.core; |
import java.util.Locale; |
public abstract class Locales |
{ |
private static final Locale[] locales = { |
new Locale("en"), |
new Locale("de"), |
new Locale("ru") |
}; |
public static Locale[] getLocales() |
{ |
return locales; |
} |
} |