Fix open id.
1
wise-webapp/config
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../config/
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.wisemapping.model;
|
||||||
|
|
||||||
|
public enum AuthenticationSchema
|
||||||
|
{
|
||||||
|
DATABASE(0),
|
||||||
|
LDAP(1),
|
||||||
|
OPENID(2);
|
||||||
|
private final int schemaCode;
|
||||||
|
|
||||||
|
AuthenticationSchema(int schemaCode) {
|
||||||
|
this.schemaCode = schemaCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSchemaCode() {
|
||||||
|
return schemaCode;
|
||||||
|
}
|
||||||
|
}
|
@ -36,6 +36,7 @@ public class User
|
|||||||
private Calendar activationDate;
|
private Calendar activationDate;
|
||||||
private Set<String> tags = new HashSet<String>();
|
private Set<String> tags = new HashSet<String>();
|
||||||
private boolean allowSendEmail = false;
|
private boolean allowSendEmail = false;
|
||||||
|
private int schema;
|
||||||
private String locale;
|
private String locale;
|
||||||
|
|
||||||
|
|
||||||
@ -114,4 +115,12 @@ public class User
|
|||||||
public void setLocale(@Nullable String locale) {
|
public void setLocale(@Nullable String locale) {
|
||||||
this.locale = locale;
|
this.locale = locale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getAutheticationCode() {
|
||||||
|
return this.schema;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthenticationCode(int code) {
|
||||||
|
this.schema = code;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
package com.wisemapping.security;
|
package com.wisemapping.security;
|
||||||
|
|
||||||
|
|
||||||
|
import com.wisemapping.exceptions.WiseMappingException;
|
||||||
import com.wisemapping.model.User;
|
import com.wisemapping.model.User;
|
||||||
import com.wisemapping.service.UserService;
|
import com.wisemapping.service.UserService;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@ -26,17 +27,22 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
import org.springframework.dao.DataAccessException;
|
import org.springframework.dao.DataAccessException;
|
||||||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||||
|
import org.springframework.security.openid.OpenIDAttribute;
|
||||||
|
import org.springframework.security.openid.OpenIDAuthenticationToken;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public class UserDetailsService
|
public class UserDetailsService
|
||||||
implements org.springframework.security.core.userdetails.UserDetailsService {
|
implements org.springframework.security.core.userdetails.UserDetailsService, org.springframework.security.core.userdetails.AuthenticationUserDetailsService<OpenIDAuthenticationToken> {
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
private String adminUser;
|
private String adminUser;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UserDetails loadUserByUsername(@NotNull String email) throws UsernameNotFoundException, DataAccessException {
|
public UserDetails loadUserByUsername(@NotNull String email) throws UsernameNotFoundException, DataAccessException {
|
||||||
final User user = userService.getUserBy(email);
|
final User user = userService.getUserBy(email);
|
||||||
|
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
return new UserDetails(user, isAdmin(email));
|
return new UserDetails(user, isAdmin(email));
|
||||||
} else {
|
} else {
|
||||||
@ -44,6 +50,56 @@ public class UserDetailsService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@NotNull
|
||||||
|
public UserDetails loadUserDetails(@NotNull OpenIDAuthenticationToken token) throws UsernameNotFoundException {
|
||||||
|
|
||||||
|
final User tUser = buildUserFromToken(token);
|
||||||
|
final User dbUser = userService.getUserBy(tUser.getEmail());
|
||||||
|
|
||||||
|
final User result;
|
||||||
|
if (dbUser != null) {
|
||||||
|
result = dbUser;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
result = userService.createUser(tUser, false, false);
|
||||||
|
} catch (WiseMappingException e) {
|
||||||
|
throw new IllegalStateException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return new UserDetails(result, isAdmin(result.getEmail()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private User buildUserFromToken(@NotNull OpenIDAuthenticationToken token) {
|
||||||
|
final User result = new User();
|
||||||
|
|
||||||
|
final List<OpenIDAttribute> attributes = token.getAttributes();
|
||||||
|
for (OpenIDAttribute attribute : attributes) {
|
||||||
|
if (attribute.getName().equals("email")) {
|
||||||
|
final String email = attribute.getValues().get(0);
|
||||||
|
result.setEmail(email);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attribute.getName().equals("firstname")) {
|
||||||
|
final String firstName = attribute.getValues().get(0);
|
||||||
|
result.setFirstname(firstName);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attribute.getName().equals("lastname")) {
|
||||||
|
final String lastName = attribute.getValues().get(0);
|
||||||
|
result.setLastname(lastName);
|
||||||
|
}
|
||||||
|
result.setPassword("");
|
||||||
|
}
|
||||||
|
|
||||||
|
final Calendar now = Calendar.getInstance();
|
||||||
|
result.setActivationDate(now);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean isAdmin(@Nullable String email) {
|
private boolean isAdmin(@Nullable String email) {
|
||||||
return email != null && adminUser != null && email.trim().endsWith(adminUser);
|
return email != null && adminUser != null && email.trim().endsWith(adminUser);
|
||||||
}
|
}
|
||||||
@ -63,4 +119,5 @@ public class UserDetailsService
|
|||||||
public void setAdminUser(String adminUser) {
|
public void setAdminUser(String adminUser) {
|
||||||
this.adminUser = adminUser;
|
this.adminUser = adminUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -44,4 +44,5 @@ public class LoginController {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -75,6 +75,12 @@
|
|||||||
<put-attribute name="removeSignin" value="true"/>
|
<put-attribute name="removeSignin" value="true"/>
|
||||||
</definition>
|
</definition>
|
||||||
|
|
||||||
|
<definition name="openidlogin" extends="pageTemplate">
|
||||||
|
<put-attribute name="title" value="LOGIN"/>
|
||||||
|
<put-attribute name="body" value="/jsp/openidlogin.jsp"/>
|
||||||
|
<put-attribute name="removeSignin" value="true"/>
|
||||||
|
</definition>
|
||||||
|
|
||||||
<definition name="termsOfUse" extends="pageTemplate">
|
<definition name="termsOfUse" extends="pageTemplate">
|
||||||
<put-attribute name="title" value="TERM_OF_USE"/>
|
<put-attribute name="title" value="TERM_OF_USE"/>
|
||||||
<put-attribute name="body" value="/jsp/termsOfUse.jsp"/>
|
<put-attribute name="body" value="/jsp/termsOfUse.jsp"/>
|
||||||
|
@ -49,6 +49,27 @@
|
|||||||
always-use-default-target="false"
|
always-use-default-target="false"
|
||||||
authentication-failure-url="/c/login?login_error=2"
|
authentication-failure-url="/c/login?login_error=2"
|
||||||
login-processing-url="/c/j_spring_security_check"/>
|
login-processing-url="/c/j_spring_security_check"/>
|
||||||
|
|
||||||
|
<sec:openid-login user-service-ref="userDetailsService"
|
||||||
|
authentication-failure-url="/c/login.jsp?login_error=true"
|
||||||
|
login-processing-url="/c/j_spring_openid_security_check">
|
||||||
|
|
||||||
|
<sec:attribute-exchange identifier-match="https://www.google.com/.*">
|
||||||
|
<sec:openid-attribute name="email" type="http://axschema.org/contact/email" required="true" count="1"/>
|
||||||
|
<sec:openid-attribute name="firstname" type="http://axschema.org/namePerson/first" required="true"/>
|
||||||
|
<sec:openid-attribute name="lastname" type="http://axschema.org/namePerson/last" required="true"/>
|
||||||
|
</sec:attribute-exchange>
|
||||||
|
|
||||||
|
<sec:attribute-exchange identifier-match=".*yahoo.com.*">
|
||||||
|
<sec:openid-attribute name="email" type="http://axschema.org/contact/email" required="true"/>
|
||||||
|
<sec:openid-attribute name="fullname" type="http://axschema.org/namePerson" required="true"/>
|
||||||
|
</sec:attribute-exchange>
|
||||||
|
|
||||||
|
<sec:attribute-exchange identifier-match=".*myopenid.com.*">
|
||||||
|
<sec:openid-attribute name="email" type="http://schema.openid.net/contact/email" required="true"/>
|
||||||
|
<sec:openid-attribute name="fullname" type="http://schema.openid.net/namePerson" required="true"/>
|
||||||
|
</sec:attribute-exchange>
|
||||||
|
</sec:openid-login>
|
||||||
<sec:remember-me key="wisemapping-hashed-key"/>
|
<sec:remember-me key="wisemapping-hashed-key"/>
|
||||||
<sec:logout logout-url="/c/logout" invalidate-session="true" logout-success-url="/c/login"/>
|
<sec:logout logout-url="/c/logout" invalidate-session="true" logout-success-url="/c/login"/>
|
||||||
</sec:http>
|
</sec:http>
|
||||||
|
45
wise-webapp/src/main/webapp/css/openid.css
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#openid_form {
|
||||||
|
width: 580px;
|
||||||
|
}
|
||||||
|
#openid_form legend {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
#openid_choice {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
#openid_input_area {
|
||||||
|
clear: both;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
#openid_btns, #openid_btns br {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
#openid_highlight {
|
||||||
|
padding: 3px;
|
||||||
|
background-color: #FFFCC9;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.openid_large_btn {
|
||||||
|
width: 100px;
|
||||||
|
height: 60px;
|
||||||
|
border: 1px solid #DDD;
|
||||||
|
margin: 3px;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.openid_small_btn {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
border: 1px solid #DDD;
|
||||||
|
margin: 3px;
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
a.openid_large_btn:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
a.openid_large_btn:focus
|
||||||
|
{
|
||||||
|
-moz-outline-style: none;
|
||||||
|
}
|
||||||
|
.openid_selected {
|
||||||
|
border: 4px solid #DDD;
|
||||||
|
}
|
BIN
wise-webapp/src/main/webapp/images.large/aol.gif
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
wise-webapp/src/main/webapp/images.large/facebook.gif
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
wise-webapp/src/main/webapp/images.large/google.gif
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
wise-webapp/src/main/webapp/images.large/mailru.gif
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
wise-webapp/src/main/webapp/images.large/myopenid.gif
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
wise-webapp/src/main/webapp/images.large/openid.gif
Normal file
After Width: | Height: | Size: 740 B |
BIN
wise-webapp/src/main/webapp/images.large/rambler.gif
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
wise-webapp/src/main/webapp/images.large/verisign.gif
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
wise-webapp/src/main/webapp/images.large/vkontakte.gif
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
wise-webapp/src/main/webapp/images.large/yahoo.gif
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
wise-webapp/src/main/webapp/images.large/yandex.gif
Normal file
After Width: | Height: | Size: 873 B |
BIN
wise-webapp/src/main/webapp/images.small/aol.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/aol.ico.gif
Normal file
After Width: | Height: | Size: 157 B |
BIN
wise-webapp/src/main/webapp/images.small/aol.ico.png
Normal file
After Width: | Height: | Size: 436 B |
BIN
wise-webapp/src/main/webapp/images.small/blogger.ico
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
wise-webapp/src/main/webapp/images.small/blogger.ico.gif
Normal file
After Width: | Height: | Size: 146 B |
BIN
wise-webapp/src/main/webapp/images.small/blogger.ico.png
Normal file
After Width: | Height: | Size: 432 B |
BIN
wise-webapp/src/main/webapp/images.small/claimid.ico
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
wise-webapp/src/main/webapp/images.small/claimid.ico.gif
Normal file
After Width: | Height: | Size: 579 B |
BIN
wise-webapp/src/main/webapp/images.small/claimid.ico.png
Normal file
After Width: | Height: | Size: 629 B |
BIN
wise-webapp/src/main/webapp/images.small/clickpass.ico
Normal file
After Width: | Height: | Size: 771 B |
BIN
wise-webapp/src/main/webapp/images.small/clickpass.ico.gif
Normal file
After Width: | Height: | Size: 527 B |
BIN
wise-webapp/src/main/webapp/images.small/clickpass.ico.png
Normal file
After Width: | Height: | Size: 631 B |
BIN
wise-webapp/src/main/webapp/images.small/facebook.ico
Normal file
After Width: | Height: | Size: 9.9 KiB |
BIN
wise-webapp/src/main/webapp/images.small/facebook.ico.gif
Normal file
After Width: | Height: | Size: 115 B |
BIN
wise-webapp/src/main/webapp/images.small/facebook.ico.png
Normal file
After Width: | Height: | Size: 376 B |
BIN
wise-webapp/src/main/webapp/images.small/flickr.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/flickr.ico.gif
Normal file
After Width: | Height: | Size: 103 B |
BIN
wise-webapp/src/main/webapp/images.small/flickr.ico.png
Normal file
After Width: | Height: | Size: 426 B |
BIN
wise-webapp/src/main/webapp/images.small/google.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/google.ico.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/google.ico.png
Normal file
After Width: | Height: | Size: 993 B |
BIN
wise-webapp/src/main/webapp/images.small/google_profile.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/google_profile.ico.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/google_profile.ico.png
Normal file
After Width: | Height: | Size: 993 B |
BIN
wise-webapp/src/main/webapp/images.small/launchpad.ico
Normal file
After Width: | Height: | Size: 419 B |
BIN
wise-webapp/src/main/webapp/images.small/launchpad.ico.gif
Normal file
After Width: | Height: | Size: 318 B |
BIN
wise-webapp/src/main/webapp/images.small/launchpad.ico.png
Normal file
After Width: | Height: | Size: 533 B |
BIN
wise-webapp/src/main/webapp/images.small/linkedin.ico
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
wise-webapp/src/main/webapp/images.small/linkedin.ico.gif
Normal file
After Width: | Height: | Size: 374 B |
BIN
wise-webapp/src/main/webapp/images.small/linkedin.ico.png
Normal file
After Width: | Height: | Size: 552 B |
BIN
wise-webapp/src/main/webapp/images.small/livejournal.ico
Normal file
After Width: | Height: | Size: 5.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/livejournal.ico.gif
Normal file
After Width: | Height: | Size: 562 B |
BIN
wise-webapp/src/main/webapp/images.small/livejournal.ico.png
Normal file
After Width: | Height: | Size: 713 B |
BIN
wise-webapp/src/main/webapp/images.small/mailru.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/mailru.ico.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/mailru.ico.png
Normal file
After Width: | Height: | Size: 977 B |
BIN
wise-webapp/src/main/webapp/images.small/myopenid.ico
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
wise-webapp/src/main/webapp/images.small/myopenid.ico.gif
Normal file
After Width: | Height: | Size: 88 B |
BIN
wise-webapp/src/main/webapp/images.small/myopenid.ico.png
Normal file
After Width: | Height: | Size: 511 B |
BIN
wise-webapp/src/main/webapp/images.small/openid.ico
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
wise-webapp/src/main/webapp/images.small/openid.ico.gif
Normal file
After Width: | Height: | Size: 328 B |
BIN
wise-webapp/src/main/webapp/images.small/openid.ico.png
Normal file
After Width: | Height: | Size: 539 B |
BIN
wise-webapp/src/main/webapp/images.small/rambler.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/rambler.ico.gif
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
wise-webapp/src/main/webapp/images.small/rambler.ico.png
Normal file
After Width: | Height: | Size: 979 B |
BIN
wise-webapp/src/main/webapp/images.small/technorati.ico
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
wise-webapp/src/main/webapp/images.small/technorati.ico.gif
Normal file
After Width: | Height: | Size: 172 B |
BIN
wise-webapp/src/main/webapp/images.small/technorati.ico.png
Normal file
After Width: | Height: | Size: 606 B |
BIN
wise-webapp/src/main/webapp/images.small/twitter.ico
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
wise-webapp/src/main/webapp/images.small/twitter.ico.gif
Normal file
After Width: | Height: | Size: 162 B |
BIN
wise-webapp/src/main/webapp/images.small/twitter.ico.png
Normal file
After Width: | Height: | Size: 513 B |
BIN
wise-webapp/src/main/webapp/images.small/verisign.ico
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
wise-webapp/src/main/webapp/images.small/verisign.ico.gif
Normal file
After Width: | Height: | Size: 603 B |
BIN
wise-webapp/src/main/webapp/images.small/verisign.ico.png
Normal file
After Width: | Height: | Size: 859 B |
BIN
wise-webapp/src/main/webapp/images.small/vidoop.ico
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
wise-webapp/src/main/webapp/images.small/vidoop.ico.gif
Normal file
After Width: | Height: | Size: 201 B |
BIN
wise-webapp/src/main/webapp/images.small/vidoop.ico.png
Normal file
After Width: | Height: | Size: 499 B |
BIN
wise-webapp/src/main/webapp/images.small/vkontakte.ico
Normal file
After Width: | Height: | Size: 894 B |
BIN
wise-webapp/src/main/webapp/images.small/vkontakte.ico.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/vkontakte.ico.png
Normal file
After Width: | Height: | Size: 713 B |
BIN
wise-webapp/src/main/webapp/images.small/winliveid.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/winliveid.ico.gif
Normal file
After Width: | Height: | Size: 1007 B |
BIN
wise-webapp/src/main/webapp/images.small/winliveid.ico.png
Normal file
After Width: | Height: | Size: 909 B |
BIN
wise-webapp/src/main/webapp/images.small/wordpress.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
wise-webapp/src/main/webapp/images.small/wordpress.ico.gif
Normal file
After Width: | Height: | Size: 91 B |
BIN
wise-webapp/src/main/webapp/images.small/wordpress.ico.png
Normal file
After Width: | Height: | Size: 566 B |
BIN
wise-webapp/src/main/webapp/images.small/yahoo.ico
Normal file
After Width: | Height: | Size: 318 B |
BIN
wise-webapp/src/main/webapp/images.small/yahoo.ico.gif
Normal file
After Width: | Height: | Size: 174 B |
BIN
wise-webapp/src/main/webapp/images.small/yahoo.ico.png
Normal file
After Width: | Height: | Size: 575 B |
BIN
wise-webapp/src/main/webapp/images.small/yandex.ico
Normal file
After Width: | Height: | Size: 318 B |
BIN
wise-webapp/src/main/webapp/images.small/yandex.ico.gif
Normal file
After Width: | Height: | Size: 168 B |
BIN
wise-webapp/src/main/webapp/images.small/yandex.ico.png
Normal file
After Width: | Height: | Size: 459 B |
BIN
wise-webapp/src/main/webapp/images/openid-inputicon.gif
Normal file
After Width: | Height: | Size: 237 B |
BIN
wise-webapp/src/main/webapp/images/openid-providers-en.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
wise-webapp/src/main/webapp/images/openid-providers-ru.png
Normal file
After Width: | Height: | Size: 15 KiB |
96
wise-webapp/src/main/webapp/js/openid-en.js
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
Simple OpenID Plugin
|
||||||
|
http://code.google.com/p/openid-selector/
|
||||||
|
|
||||||
|
This code is licensed under the New BSD License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var providers_large = {
|
||||||
|
google : {
|
||||||
|
name : 'Google',
|
||||||
|
url : 'https://www.google.com/accounts/o8/id'
|
||||||
|
},
|
||||||
|
yahoo : {
|
||||||
|
name : 'Yahoo',
|
||||||
|
url : 'http://me.yahoo.com/'
|
||||||
|
},
|
||||||
|
aol : {
|
||||||
|
name : 'AOL',
|
||||||
|
label : 'Enter your AOL screenname.',
|
||||||
|
url : 'http://openid.aol.com/{username}'
|
||||||
|
},
|
||||||
|
myopenid : {
|
||||||
|
name : 'MyOpenID',
|
||||||
|
label : 'Enter your MyOpenID username.',
|
||||||
|
url : 'http://{username}.myopenid.com/'
|
||||||
|
},
|
||||||
|
openid : {
|
||||||
|
name : 'OpenID',
|
||||||
|
label : 'Enter your OpenID.',
|
||||||
|
url : null
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var providers_small = {
|
||||||
|
livejournal : {
|
||||||
|
name : 'LiveJournal',
|
||||||
|
label : 'Enter your Livejournal username.',
|
||||||
|
url : 'http://{username}.livejournal.com/'
|
||||||
|
},
|
||||||
|
/* flickr: {
|
||||||
|
name: 'Flickr',
|
||||||
|
label: 'Enter your Flickr username.',
|
||||||
|
url: 'http://flickr.com/{username}/'
|
||||||
|
}, */
|
||||||
|
/* technorati: {
|
||||||
|
name: 'Technorati',
|
||||||
|
label: 'Enter your Technorati username.',
|
||||||
|
url: 'http://technorati.com/people/technorati/{username}/'
|
||||||
|
}, */
|
||||||
|
wordpress : {
|
||||||
|
name : 'Wordpress',
|
||||||
|
label : 'Enter your Wordpress.com username.',
|
||||||
|
url : 'http://{username}.wordpress.com/'
|
||||||
|
},
|
||||||
|
blogger : {
|
||||||
|
name : 'Blogger',
|
||||||
|
label : 'Your Blogger account',
|
||||||
|
url : 'http://{username}.blogspot.com/'
|
||||||
|
},
|
||||||
|
verisign : {
|
||||||
|
name : 'Verisign',
|
||||||
|
label : 'Your Verisign username',
|
||||||
|
url : 'http://{username}.pip.verisignlabs.com/'
|
||||||
|
},
|
||||||
|
/* vidoop: {
|
||||||
|
name: 'Vidoop',
|
||||||
|
label: 'Your Vidoop username',
|
||||||
|
url: 'http://{username}.myvidoop.com/'
|
||||||
|
}, */
|
||||||
|
/* launchpad: {
|
||||||
|
name: 'Launchpad',
|
||||||
|
label: 'Your Launchpad username',
|
||||||
|
url: 'https://launchpad.net/~{username}'
|
||||||
|
}, */
|
||||||
|
claimid : {
|
||||||
|
name : 'ClaimID',
|
||||||
|
label : 'Your ClaimID username',
|
||||||
|
url : 'http://claimid.com/{username}'
|
||||||
|
},
|
||||||
|
clickpass : {
|
||||||
|
name : 'ClickPass',
|
||||||
|
label : 'Enter your ClickPass username',
|
||||||
|
url : 'http://clickpass.com/public/{username}'
|
||||||
|
},
|
||||||
|
google_profile : {
|
||||||
|
name : 'Google Profile',
|
||||||
|
label : 'Enter your Google Profile username',
|
||||||
|
url : 'http://www.google.com/profiles/{username}'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
openid.locale = 'en';
|
||||||
|
openid.sprite = 'en'; // reused in german& japan localization
|
||||||
|
openid.demo_text = 'In client demo mode. Normally would have submitted OpenID:';
|
||||||
|
openid.signin_text = 'Sign-In';
|
||||||
|
openid.image_title = 'log in with {provider}';
|
202
wise-webapp/src/main/webapp/js/openid-jquery.js
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
/*
|
||||||
|
Simple OpenID Plugin
|
||||||
|
http://code.google.com/p/openid-selector/
|
||||||
|
|
||||||
|
This code is licensed under the New BSD License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var providers;
|
||||||
|
var openid;
|
||||||
|
(function ($) {
|
||||||
|
openid = {
|
||||||
|
version : '1.3', // version constant
|
||||||
|
demo : false,
|
||||||
|
demo_text : null,
|
||||||
|
cookie_expires : 6 * 30, // 6 months.
|
||||||
|
cookie_name : 'openid_provider',
|
||||||
|
cookie_path : '/',
|
||||||
|
|
||||||
|
img_path : 'images/',
|
||||||
|
locale : null, // is set in openid-<locale>.js
|
||||||
|
sprite : null, // usually equals to locale, is set in
|
||||||
|
// openid-<locale>.js
|
||||||
|
signin_text : null, // text on submit button on the form
|
||||||
|
all_small : false, // output large providers w/ small icons
|
||||||
|
no_sprite : false, // don't use sprite image
|
||||||
|
image_title : '{provider}', // for image title
|
||||||
|
|
||||||
|
input_id : null,
|
||||||
|
provider_url : null,
|
||||||
|
provider_id : null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class constructor
|
||||||
|
*
|
||||||
|
* @return {Void}
|
||||||
|
*/
|
||||||
|
init : function(input_id) {
|
||||||
|
providers = $.extend({}, providers_large, providers_small);
|
||||||
|
var openid_btns = $('#openid_btns');
|
||||||
|
this.input_id = input_id;
|
||||||
|
$('#openid_choice').show();
|
||||||
|
$('#openid_input_area').empty();
|
||||||
|
var i = 0;
|
||||||
|
// add box for each provider
|
||||||
|
for (id in providers_large) {
|
||||||
|
box = this.getBoxHTML(id, providers_large[id], (this.all_small ? 'small' : 'large'), i++);
|
||||||
|
openid_btns.append(box);
|
||||||
|
}
|
||||||
|
if (providers_small) {
|
||||||
|
openid_btns.append('<br/>');
|
||||||
|
for (id in providers_small) {
|
||||||
|
box = this.getBoxHTML(id, providers_small[id], 'small', i++);
|
||||||
|
openid_btns.append(box);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$('#openid_form').submit(this.submit);
|
||||||
|
var box_id = this.readCookie();
|
||||||
|
if (box_id) {
|
||||||
|
this.signin(box_id, true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {String}
|
||||||
|
*/
|
||||||
|
getBoxHTML : function(box_id, provider, box_size, index) {
|
||||||
|
if (this.no_sprite) {
|
||||||
|
var image_ext = box_size == 'small' ? '.ico.gif' : '.gif';
|
||||||
|
return '<a title="' + this.image_title.replace('{provider}', provider["name"]) + '" href="javascript:openid.signin(\'' + box_id + '\');"'
|
||||||
|
+ ' style="background: #FFF url(' + this.img_path + '../images.' + box_size + '/' + box_id + image_ext + ') no-repeat center center" '
|
||||||
|
+ 'class="' + box_id + ' openid_' + box_size + '_btn"></a>';
|
||||||
|
}
|
||||||
|
var x = box_size == 'small' ? -index * 24 : -index * 100;
|
||||||
|
var y = box_size == 'small' ? -60 : 0;
|
||||||
|
return '<a title="' + this.image_title.replace('{provider}', provider["name"]) + '" href="javascript:openid.signin(\'' + box_id + '\');"'
|
||||||
|
+ ' style="background: #FFF url(' + this.img_path + 'openid-providers-' + this.sprite + '.png); background-position: ' + x + 'px ' + y + 'px" '
|
||||||
|
+ 'class="' + box_id + ' openid_' + box_size + '_btn"></a>';
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provider image click
|
||||||
|
*
|
||||||
|
* @return {Void}
|
||||||
|
*/
|
||||||
|
signin : function(box_id, onload) {
|
||||||
|
var provider = providers[box_id];
|
||||||
|
if (!provider) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.highlight(box_id);
|
||||||
|
this.setCookie(box_id);
|
||||||
|
this.provider_id = box_id;
|
||||||
|
this.provider_url = provider['url'];
|
||||||
|
// prompt user for input?
|
||||||
|
if (provider['label']) {
|
||||||
|
this.useInputBox(provider);
|
||||||
|
} else {
|
||||||
|
$('#openid_input_area').empty();
|
||||||
|
if (!onload) {
|
||||||
|
$('#openid_form').submit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sign-in button click
|
||||||
|
*
|
||||||
|
* @return {Boolean}
|
||||||
|
*/
|
||||||
|
submit : function() {
|
||||||
|
var url = openid.provider_url;
|
||||||
|
if (url) {
|
||||||
|
url = url.replace('{username}', $('#openid_username').val());
|
||||||
|
openid.setOpenIdUrl(url);
|
||||||
|
}
|
||||||
|
if (openid.demo) {
|
||||||
|
alert(openid.demo_text + "\r\n" + document.getElementById(openid.input_id).value);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (url.indexOf("javascript:") == 0) {
|
||||||
|
url = url.substr("javascript:".length);
|
||||||
|
eval(url);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {Void}
|
||||||
|
*/
|
||||||
|
setOpenIdUrl : function(url) {
|
||||||
|
var hidden = document.getElementById(this.input_id);
|
||||||
|
if (hidden != null) {
|
||||||
|
hidden.value = url;
|
||||||
|
} else {
|
||||||
|
$('#openid_form').append('<input type="hidden" id="' + this.input_id + '" name="' + this.input_id + '" value="' + url + '"/>');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {Void}
|
||||||
|
*/
|
||||||
|
highlight : function(box_id) {
|
||||||
|
// remove previous highlight.
|
||||||
|
var highlight = $('#openid_highlight');
|
||||||
|
if (highlight) {
|
||||||
|
highlight.replaceWith($('#openid_highlight a')[0]);
|
||||||
|
}
|
||||||
|
// add new highlight.
|
||||||
|
$('.' + box_id).wrap('<div id="openid_highlight"></div>');
|
||||||
|
},
|
||||||
|
|
||||||
|
setCookie : function(value) {
|
||||||
|
var date = new Date();
|
||||||
|
date.setTime(date.getTime() + (this.cookie_expires * 24 * 60 * 60 * 1000));
|
||||||
|
var expires = "; expires=" + date.toGMTString();
|
||||||
|
document.cookie = this.cookie_name + "=" + value + expires + "; path=" + this.cookie_path;
|
||||||
|
},
|
||||||
|
|
||||||
|
readCookie : function() {
|
||||||
|
var nameEQ = this.cookie_name + "=";
|
||||||
|
var ca = document.cookie.split(';');
|
||||||
|
for ( var i = 0; i < ca.length; i++) {
|
||||||
|
var c = ca[i];
|
||||||
|
while (c.charAt(0) == ' ')
|
||||||
|
c = c.substring(1, c.length);
|
||||||
|
if (c.indexOf(nameEQ) == 0)
|
||||||
|
return c.substring(nameEQ.length, c.length);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {Void}
|
||||||
|
*/
|
||||||
|
useInputBox : function(provider) {
|
||||||
|
var input_area = $('#openid_input_area');
|
||||||
|
var html = '';
|
||||||
|
var id = 'openid_username';
|
||||||
|
var value = '';
|
||||||
|
var label = provider['label'];
|
||||||
|
var style = '';
|
||||||
|
if (label) {
|
||||||
|
html = '<p>' + label + '</p>';
|
||||||
|
}
|
||||||
|
if (provider['name'] == 'OpenID') {
|
||||||
|
id = this.input_id;
|
||||||
|
value = 'http://';
|
||||||
|
style = 'background: #FFF url(' + this.img_path + 'openid-inputicon.gif) no-repeat scroll 0 50%; padding-left:18px;';
|
||||||
|
}
|
||||||
|
html += '<input id="' + id + '" type="text" style="' + style + '" name="' + id + '" value="' + value + '" />'
|
||||||
|
+ '<input id="openid_submit" type="submit" value="' + this.signin_text + '"/>';
|
||||||
|
input_area.empty();
|
||||||
|
input_area.append(html);
|
||||||
|
$('#' + id).focus();
|
||||||
|
},
|
||||||
|
|
||||||
|
setDemoMode : function(demoMode) {
|
||||||
|
this.demo = demoMode;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})(jQuery);
|
@ -3,6 +3,23 @@
|
|||||||
|
|
||||||
<%--@elvariable id="isHsql" type="boolean"--%>
|
<%--@elvariable id="isHsql" type="boolean"--%>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
|
||||||
|
<script type="text/javascript" src="js/openid-jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="js/openid-en.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function() {
|
||||||
|
openid.init('openid_identifier');
|
||||||
|
openid.setDemoMode(true); //Stops form submission for client javascript-only test purposes
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<!-- /Simple OpenID Selector -->
|
||||||
|
<style type="text/css">
|
||||||
|
/* Basic page formatting */
|
||||||
|
body {
|
||||||
|
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
<script type="text/javascript" language="javascript">
|
<script type="text/javascript" language="javascript">
|
||||||
$(function () {
|
$(function () {
|
||||||
$('#loginForm').submit(function () {
|
$('#loginForm').submit(function () {
|
||||||
@ -17,6 +34,25 @@
|
|||||||
<spring:message code="WELCOME_DETAILS"/>
|
<spring:message code="WELCOME_DETAILS"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="span1">
|
<div class="span1">
|
||||||
|
<!-- Simple OpenID Selector -->
|
||||||
|
<form action="examples/consumer/try_auth.php" method="get" id="openid_form">
|
||||||
|
<input type="hidden" name="action" value="verify" />
|
||||||
|
<fieldset>
|
||||||
|
<legend>Sign-in or Create New Account</legend>
|
||||||
|
<div id="openid_choice">
|
||||||
|
<p>Please click your account provider:</p>
|
||||||
|
<div id="openid_btns"></div>
|
||||||
|
</div>
|
||||||
|
<div id="openid_input_area">
|
||||||
|
<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
|
||||||
|
<input id="openid_submit" type="submit" value="Sign-In"/>
|
||||||
|
</div>
|
||||||
|
<noscript>
|
||||||
|
<p>OpenID is service that allows you to log-on to many different websites using a single indentity.
|
||||||
|
Find out <a href="http://openid.net/what/">more about OpenID</a> and <a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
|
||||||
|
</noscript>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div id="login" class="fform span6">
|
<div id="login" class="fform span6">
|
||||||
@ -69,13 +105,13 @@
|
|||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div id="register" class="span12">
|
<div id="register" class="span12">
|
||||||
<c:if test="${requestScope['security.type']=='db'}">
|
<c:if test="${requestScope['security.type']=='db'}">
|
||||||
<b><spring:message code="NOT_READY_A_USER"/></b>
|
<b><spring:message code="NOT_READY_A_USER"/></b>
|
||||||
<spring:message code="NOT_READY_A_USER_MESSAGE"/>
|
<spring:message code="NOT_READY_A_USER_MESSAGE"/>
|
||||||
<a href="c/user/registration">
|
<a href="c/user/registration">
|
||||||
<spring:message code="JOIN_NOW"/>
|
<spring:message code="JOIN_NOW"/>
|
||||||
</a>
|
</a>
|
||||||
</c:if>
|
</c:if>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
64
wise-webapp/src/main/webapp/jsp/loginOpenId.jsp
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>OpenID Login</title>
|
||||||
|
|
||||||
|
<!-- Simple OpenID Selector -->
|
||||||
|
<link rel="stylesheet" href="<c:url value='/css/openid.css'/>" />
|
||||||
|
<script type="text/javascript" src="<c:url value='/js/jquery-1.2.6.min.js'/>"></script>
|
||||||
|
<script type="text/javascript" src="<c:url value='/js/openid-jquery.js'/>"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function() {
|
||||||
|
openid.init('openid_identifier');
|
||||||
|
// openid.setDemoMode(true); Stops form submission for client javascript-only test purposes
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<!-- /Simple OpenID Selector -->
|
||||||
|
|
||||||
|
<style type="text/css">
|
||||||
|
/* Basic page formatting. */
|
||||||
|
body {
|
||||||
|
font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<c:if test="${not empty param.login_error}">
|
||||||
|
<font color="red">
|
||||||
|
Your login attempt was not successful, try again.<br/><br/>
|
||||||
|
Reason: <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}"/>.
|
||||||
|
</font>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
<!-- Simple OpenID Selector -->
|
||||||
|
<form action="<c:url value='c/j_spring_openid_security_check'/>" method="post" id="openid_form">
|
||||||
|
<input type="hidden" name="action" value="verify" />
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>Sign-in or Create New Account</legend>
|
||||||
|
|
||||||
|
<div id="openid_choice">
|
||||||
|
<p>Please click your account provider:</p>
|
||||||
|
<div id="openid_btns"></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="openid_input_area">
|
||||||
|
<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
|
||||||
|
<input id="openid_submit" type="submit" value="Sign-In"/>
|
||||||
|
</div>
|
||||||
|
<noscript>
|
||||||
|
<p>OpenID is a service that allows you to log-on to many different websites using a single identity.
|
||||||
|
Find out <a href="http://openid.net/what/">more about OpenID</a> and <a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
|
||||||
|
</noscript>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
<!-- /Simple OpenID Selector -->
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
64
wise-webapp/src/main/webapp/jsp/openidlogin.jsp
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>OpenID Login</title>
|
||||||
|
|
||||||
|
<!-- Simple OpenID Selector -->
|
||||||
|
<link rel="stylesheet" href="<c:url value='/css/openid.css'/>" />
|
||||||
|
<script type="text/javascript" src="<c:url value='/js/jquery-1.2.6.min.js'/>"></script>
|
||||||
|
<script type="text/javascript" src="<c:url value='/js/openid-jquery.js'/>"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function() {
|
||||||
|
openid.init('openid_identifier');
|
||||||
|
// openid.setDemoMode(true); Stops form submission for client javascript-only test purposes
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<!-- /Simple OpenID Selector -->
|
||||||
|
|
||||||
|
<style type="text/css">
|
||||||
|
/* Basic page formatting. */
|
||||||
|
body {
|
||||||
|
font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<c:if test="${not empty param.login_error}">
|
||||||
|
<font color="red">
|
||||||
|
Your login attempt was not successful, try again.<br/><br/>
|
||||||
|
Reason: <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}"/>.
|
||||||
|
</font>
|
||||||
|
</c:if>
|
||||||
|
|
||||||
|
<!-- Simple OpenID Selector -->
|
||||||
|
<form action="<c:url value='j_spring_openid_security_check'/>" method="post" id="openid_form">
|
||||||
|
<input type="hidden" name="action" value="verify" />
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<legend>Sign-in or Create New Account</legend>
|
||||||
|
|
||||||
|
<div id="openid_choice">
|
||||||
|
<p>Please click your account provider:</p>
|
||||||
|
<div id="openid_btns"></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="openid_input_area">
|
||||||
|
<input id="openid_identifier" name="openid_identifier" type="text" value="http://" />
|
||||||
|
<input id="openid_submit" type="submit" value="Sign-In"/>
|
||||||
|
</div>
|
||||||
|
<noscript>
|
||||||
|
<p>OpenID is a service that allows you to log-on to many different websites using a single identity.
|
||||||
|
Find out <a href="http://openid.net/what/">more about OpenID</a> and <a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
|
||||||
|
</noscript>
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
<!-- /Simple OpenID Selector -->
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|