Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
rhbz1002340 - verify username availability in first openid log in
Browse files Browse the repository at this point in the history
  • Loading branch information
Patrick Huang committed Sep 9, 2013
1 parent e5cdc12 commit ba34993
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 11 deletions.
6 changes: 6 additions & 0 deletions functional-test/src/test/resources/conf/standalone.xml
Expand Up @@ -218,6 +218,7 @@
<subsystem xmlns="urn:jboss:domain:naming:1.3">
<bindings>
<simple name="java:global/zanata/security/auth-policy-names/internal" value="zanata.internal"/>
<simple name="java:global/zanata/security/auth-policy-names/openid" value="zanata.openid"/>
<simple name="java:global/zanata/security/admin-users" value="admin"/>
<simple name="java:global/zanata/email/default-from-address" value="no-reply@zanata.org" />
<simple name="java:global/zanata/files/document-storage-directory" value="${project.build.directory}/zanata-documents"/>
Expand Down Expand Up @@ -262,6 +263,11 @@
<login-module code="org.jboss.seam.security.jaas.SeamLoginModule" flag="required"/>
</authentication>
</security-domain>
<security-domain name="zanata.openid">
<authentication>
<login-module code="org.zanata.security.OpenIdLoginModule" flag="required"/>
</authentication>
</security-domain>
</security-domains>
</subsystem>
<subsystem xmlns="urn:jboss:domain:threads:1.1"/>
Expand Down
30 changes: 20 additions & 10 deletions zanata-war/src/main/java/org/zanata/action/ProfileAction.java
Expand Up @@ -22,6 +22,7 @@

import java.io.Serializable;

import javax.faces.event.ValueChangeEvent;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

Expand Down Expand Up @@ -63,10 +64,11 @@ public class ProfileAction implements Serializable
private String username;
private String activationKey;
private boolean valid;
private boolean newUser;

@In
ApplicationConfiguration applicationConfiguration;

@Logger
Log log;

Expand All @@ -93,24 +95,24 @@ public class ProfileAction implements Serializable

@In
RegisterService registerServiceImpl;

@In
EmailChangeService emailChangeService;

private void validateEmail(String email)
{
HPerson person = personDAO.findByEmail(email);

if( person != null && !person.getAccount().equals( authenticatedAccount ) )
{
valid = false;
FacesMessages.instance().addToControl("email", "This email address is already taken");
}
}

private void validateUsername()
private void validateUsername(String username)
{
HAccount account = accountDAO.getByUsername(this.username);
HAccount account = accountDAO.getByUsername(username);

if( account != null && !account.equals( authenticatedAccount ) )
{
Expand All @@ -119,19 +121,26 @@ private void validateUsername()
}
}

public void verifyUsernameAvailable(ValueChangeEvent e)
{
String username = (String) e.getNewValue();
validateUsername(username);
}

@Create
public void onCreate()
{
username = identity.getCredentials().getUsername();
if (identityStore.isNewUser(username))
newUser = identityStore.isNewUser(username);
if (newUser)
{
name = identity.getCredentials().getUsername();
String domain = applicationConfiguration.getDomainName();
if( domain == null )
{
email = "";
}
else
else
{
if( applicationConfiguration.isOpenIdAuth() )
{
Expand Down Expand Up @@ -188,7 +197,7 @@ public String getUsername()
public void setUsername(String username)
{
this.username = username;
validateUsername();
validateUsername(username);
}

public String getActivationKey()
Expand All @@ -206,7 +215,7 @@ public String edit()
{
this.valid = true;
validateEmail(this.email);
validateUsername();
validateUsername(username);

if( !this.isValid() )
{
Expand Down Expand Up @@ -267,7 +276,8 @@ public boolean isValid()

public boolean isNewUser()
{
return identityStore.isNewUser(username);
// in case someone else has registered in the middle
return newUser || identityStore.isNewUser(username);
}

}
3 changes: 2 additions & 1 deletion zanata-war/src/main/webapp/profile/edit.xhtml
Expand Up @@ -36,7 +36,8 @@
</ui:remove>
<s:decorate id="usernameField" template="../WEB-INF/layout/edit.xhtml" rendered="#{profileAction.newUser}" enclose="true">
<ui:define name="label">#{messages['jsf.Username']}</ui:define>
<h:inputText id="username" value="#{profileAction.username}" required="true" >
<h:inputText id="username" value="#{profileAction.username}" required="true"
valueChangeListener="#{profileAction.verifyUsernameAvailable}" onchange="submit()" >
<a4j:ajax event="blur" render="usernameField" execute="@this"/>
</h:inputText>

Expand Down

0 comments on commit ba34993

Please sign in to comment.