mirror of
https://github.com/sismics/docs.git
synced 2024-11-22 22:07:56 +01:00
Closes #30: Delete locale & theme concept
This commit is contained in:
parent
0fe51d355c
commit
a95dcf488d
@ -10,21 +10,11 @@ import com.google.common.collect.Lists;
|
|||||||
* @author jtremeaux
|
* @author jtremeaux
|
||||||
*/
|
*/
|
||||||
public class Constants {
|
public class Constants {
|
||||||
/**
|
|
||||||
* Default locale.
|
|
||||||
*/
|
|
||||||
public static final String DEFAULT_LOCALE_ID = "en";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default timezone ID.
|
* Default timezone ID.
|
||||||
*/
|
*/
|
||||||
public static final String DEFAULT_TIMEZONE_ID = "Europe/London";
|
public static final String DEFAULT_TIMEZONE_ID = "Europe/London";
|
||||||
|
|
||||||
/**
|
|
||||||
* Default theme ID.
|
|
||||||
*/
|
|
||||||
public static final String DEFAULT_THEME_ID = "default.less";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Administrator's default password ("admin").
|
* Administrator's default password ("admin").
|
||||||
*/
|
*/
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
package com.sismics.docs.core.dao.jpa;
|
|
||||||
|
|
||||||
import com.sismics.docs.core.model.jpa.Locale;
|
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
|
||||||
import javax.persistence.NoResultException;
|
|
||||||
import javax.persistence.Query;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale DAO.
|
|
||||||
*
|
|
||||||
* @author jtremeaux
|
|
||||||
*/
|
|
||||||
public class LocaleDao {
|
|
||||||
/**
|
|
||||||
* Gets a locale by its ID.
|
|
||||||
*
|
|
||||||
* @param id Locale ID
|
|
||||||
* @return Locale
|
|
||||||
*/
|
|
||||||
public Locale getById(String id) {
|
|
||||||
EntityManager em = ThreadLocalContext.get().getEntityManager();
|
|
||||||
try {
|
|
||||||
return em.find(Locale.class, id);
|
|
||||||
} catch (NoResultException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the list of all locales.
|
|
||||||
*
|
|
||||||
* @return List of locales
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public List<Locale> findAll() {
|
|
||||||
EntityManager em = ThreadLocalContext.get().getEntityManager();
|
|
||||||
Query q = em.createQuery("select l from Locale l order by l.id");
|
|
||||||
return q.getResultList();
|
|
||||||
}
|
|
||||||
}
|
|
@ -16,7 +16,6 @@ import org.mindrot.jbcrypt.BCrypt;
|
|||||||
|
|
||||||
import com.google.common.base.Joiner;
|
import com.google.common.base.Joiner;
|
||||||
import com.sismics.docs.core.constant.AuditLogType;
|
import com.sismics.docs.core.constant.AuditLogType;
|
||||||
import com.sismics.docs.core.constant.Constants;
|
|
||||||
import com.sismics.docs.core.dao.jpa.criteria.UserCriteria;
|
import com.sismics.docs.core.dao.jpa.criteria.UserCriteria;
|
||||||
import com.sismics.docs.core.dao.jpa.dto.UserDto;
|
import com.sismics.docs.core.dao.jpa.dto.UserDto;
|
||||||
import com.sismics.docs.core.model.jpa.User;
|
import com.sismics.docs.core.model.jpa.User;
|
||||||
@ -78,7 +77,6 @@ public class UserDao {
|
|||||||
// Create the user
|
// Create the user
|
||||||
user.setCreateDate(new Date());
|
user.setCreateDate(new Date());
|
||||||
user.setPassword(hashPassword(user.getPassword()));
|
user.setPassword(hashPassword(user.getPassword()));
|
||||||
user.setTheme(Constants.DEFAULT_THEME_ID);
|
|
||||||
em.persist(user);
|
em.persist(user);
|
||||||
|
|
||||||
// Create audit log
|
// Create audit log
|
||||||
@ -102,10 +100,7 @@ public class UserDao {
|
|||||||
User userFromDb = (User) q.getSingleResult();
|
User userFromDb = (User) q.getSingleResult();
|
||||||
|
|
||||||
// Update the user
|
// Update the user
|
||||||
userFromDb.setLocaleId(user.getLocaleId());
|
|
||||||
userFromDb.setEmail(user.getEmail());
|
userFromDb.setEmail(user.getEmail());
|
||||||
userFromDb.setTheme(user.getTheme());
|
|
||||||
userFromDb.setFirstConnection(user.isFirstConnection());
|
|
||||||
|
|
||||||
// Create audit log
|
// Create audit log
|
||||||
AuditLogUtil.create(userFromDb, AuditLogType.UPDATE);
|
AuditLogUtil.create(userFromDb, AuditLogType.UPDATE);
|
||||||
@ -231,7 +226,7 @@ public class UserDao {
|
|||||||
Map<String, Object> parameterMap = new HashMap<String, Object>();
|
Map<String, Object> parameterMap = new HashMap<String, Object>();
|
||||||
List<String> criteriaList = new ArrayList<String>();
|
List<String> criteriaList = new ArrayList<String>();
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder("select u.USE_ID_C as c0, u.USE_USERNAME_C as c1, u.USE_EMAIL_C as c2, u.USE_CREATEDATE_D as c3, u.USE_IDLOCALE_C as c4");
|
StringBuilder sb = new StringBuilder("select u.USE_ID_C as c0, u.USE_USERNAME_C as c1, u.USE_EMAIL_C as c2, u.USE_CREATEDATE_D as c3");
|
||||||
sb.append(" from T_USER u ");
|
sb.append(" from T_USER u ");
|
||||||
|
|
||||||
// Add search criterias
|
// Add search criterias
|
||||||
@ -260,7 +255,6 @@ public class UserDao {
|
|||||||
userDto.setUsername((String) o[i++]);
|
userDto.setUsername((String) o[i++]);
|
||||||
userDto.setEmail((String) o[i++]);
|
userDto.setEmail((String) o[i++]);
|
||||||
userDto.setCreateTimestamp(((Timestamp) o[i++]).getTime());
|
userDto.setCreateTimestamp(((Timestamp) o[i++]).getTime());
|
||||||
userDto.setLocaleId((String) o[i++]);
|
|
||||||
userDtoList.add(userDto);
|
userDtoList.add(userDto);
|
||||||
}
|
}
|
||||||
paginatedList.setResultList(userDtoList);
|
paginatedList.setResultList(userDtoList);
|
||||||
|
@ -11,11 +11,6 @@ public class UserDto {
|
|||||||
*/
|
*/
|
||||||
private String id;
|
private String id;
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale ID.
|
|
||||||
*/
|
|
||||||
private String localeId;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Username.
|
* Username.
|
||||||
*/
|
*/
|
||||||
@ -49,24 +44,6 @@ public class UserDto {
|
|||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter of localeId.
|
|
||||||
*
|
|
||||||
* @return localeId
|
|
||||||
*/
|
|
||||||
public String getLocaleId() {
|
|
||||||
return localeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter of localeId.
|
|
||||||
*
|
|
||||||
* @param localeId localeId
|
|
||||||
*/
|
|
||||||
public void setLocaleId(String localeId) {
|
|
||||||
this.localeId = localeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Getter of username.
|
* Getter of username.
|
||||||
*
|
*
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
package com.sismics.docs.core.model.jpa;
|
|
||||||
|
|
||||||
import javax.persistence.Column;
|
|
||||||
import javax.persistence.Entity;
|
|
||||||
import javax.persistence.Id;
|
|
||||||
import javax.persistence.Table;
|
|
||||||
|
|
||||||
import com.google.common.base.MoreObjects;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale entity.
|
|
||||||
*
|
|
||||||
* @author jtremeaux
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
@Table(name = "T_LOCALE")
|
|
||||||
public class Locale {
|
|
||||||
/**
|
|
||||||
* Locale ID (ex: fr_FR).
|
|
||||||
*/
|
|
||||||
@Id
|
|
||||||
@Column(name = "LOC_ID_C", length = 10)
|
|
||||||
private String id;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter of id.
|
|
||||||
*
|
|
||||||
* @return id
|
|
||||||
*/
|
|
||||||
public String getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter of id.
|
|
||||||
*
|
|
||||||
* @param id id
|
|
||||||
*/
|
|
||||||
public void setId(String id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return MoreObjects.toStringHelper(this)
|
|
||||||
.add("id", id)
|
|
||||||
.toString();
|
|
||||||
}
|
|
||||||
}
|
|
@ -27,12 +27,6 @@ public class User implements Loggable {
|
|||||||
@Column(name = "USE_ID_C", length = 36)
|
@Column(name = "USE_ID_C", length = 36)
|
||||||
private String id;
|
private String id;
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale ID.
|
|
||||||
*/
|
|
||||||
@Column(name = "USE_IDLOCALE_C", nullable = false, length = 10)
|
|
||||||
private String localeId;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Role ID.
|
* Role ID.
|
||||||
*/
|
*/
|
||||||
@ -63,18 +57,6 @@ public class User implements Loggable {
|
|||||||
@Column(name = "USE_EMAIL_C", nullable = false, length = 100)
|
@Column(name = "USE_EMAIL_C", nullable = false, length = 100)
|
||||||
private String email;
|
private String email;
|
||||||
|
|
||||||
/**
|
|
||||||
* Theme.
|
|
||||||
*/
|
|
||||||
@Column(name = "USE_THEME_C", nullable = false, length = 100)
|
|
||||||
private String theme;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* True if the user hasn't dismissed the first connection screen.
|
|
||||||
*/
|
|
||||||
@Column(name = "USE_FIRSTCONNECTION_B", nullable = false)
|
|
||||||
private boolean firstConnection;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creation date.
|
* Creation date.
|
||||||
*/
|
*/
|
||||||
@ -105,24 +87,6 @@ public class User implements Loggable {
|
|||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter of localeId.
|
|
||||||
*
|
|
||||||
* @return localeId
|
|
||||||
*/
|
|
||||||
public String getLocaleId() {
|
|
||||||
return localeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter of localeId.
|
|
||||||
*
|
|
||||||
* @param localeId localeId
|
|
||||||
*/
|
|
||||||
public void setLocaleId(String localeId) {
|
|
||||||
this.localeId = localeId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Getter of roleId.
|
* Getter of roleId.
|
||||||
*
|
*
|
||||||
@ -195,42 +159,6 @@ public class User implements Loggable {
|
|||||||
this.email = email;
|
this.email = email;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter of theme.
|
|
||||||
*
|
|
||||||
* @return theme
|
|
||||||
*/
|
|
||||||
public String getTheme() {
|
|
||||||
return theme;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter of theme.
|
|
||||||
*
|
|
||||||
* @param theme theme
|
|
||||||
*/
|
|
||||||
public void setTheme(String theme) {
|
|
||||||
this.theme = theme;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Getter of firstConnection.
|
|
||||||
*
|
|
||||||
* @return firstConnection
|
|
||||||
*/
|
|
||||||
public boolean isFirstConnection() {
|
|
||||||
return firstConnection;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter of firstConnection.
|
|
||||||
*
|
|
||||||
* @param firstConnection firstConnection
|
|
||||||
*/
|
|
||||||
public void setFirstConnection(boolean firstConnection) {
|
|
||||||
this.firstConnection = firstConnection;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Getter of createDate.
|
* Getter of createDate.
|
||||||
*
|
*
|
||||||
|
@ -1,62 +0,0 @@
|
|||||||
package com.sismics.util;
|
|
||||||
|
|
||||||
import com.sismics.docs.core.constant.Constants;
|
|
||||||
import com.sismics.docs.core.dao.jpa.LocaleDao;
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale utilities.
|
|
||||||
*
|
|
||||||
* @author jtremeaux
|
|
||||||
*/
|
|
||||||
public class LocaleUtil {
|
|
||||||
/**
|
|
||||||
* Returns the locale from its language / country code (ex: fr_FR).
|
|
||||||
*
|
|
||||||
* @param localeCode Locale code
|
|
||||||
* @return Locate instance
|
|
||||||
*/
|
|
||||||
public static final Locale getLocale(String localeCode) {
|
|
||||||
String[] localeCodeArray = localeCode.split("_");
|
|
||||||
String language = localeCodeArray[0];
|
|
||||||
String country = "";
|
|
||||||
String variant = "";
|
|
||||||
if (localeCodeArray.length >= 2) {
|
|
||||||
country = localeCodeArray[1];
|
|
||||||
}
|
|
||||||
if (localeCodeArray.length >= 3) {
|
|
||||||
variant = localeCodeArray[2];
|
|
||||||
}
|
|
||||||
return new Locale(language, country, variant);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts the ID of the locale from the HTTP Accept-Language header.
|
|
||||||
*
|
|
||||||
* @param acceptLanguageHeader header
|
|
||||||
* @return Locale ID
|
|
||||||
*/
|
|
||||||
public static String getLocaleIdFromAcceptLanguage(String acceptLanguageHeader) {
|
|
||||||
String localeId = null;
|
|
||||||
if (StringUtils.isNotBlank(acceptLanguageHeader)) {
|
|
||||||
acceptLanguageHeader = acceptLanguageHeader.replaceAll("-", "_");
|
|
||||||
localeId = acceptLanguageHeader.split(",")[0];
|
|
||||||
}
|
|
||||||
if (StringUtils.isNotBlank(localeId)) {
|
|
||||||
LocaleDao localeDao = new LocaleDao();
|
|
||||||
com.sismics.docs.core.model.jpa.Locale locale = localeDao.getById(localeId);
|
|
||||||
if (locale != null) {
|
|
||||||
localeId = locale.getId();
|
|
||||||
} else {
|
|
||||||
// The client provided an unknown locale
|
|
||||||
localeId = Constants.DEFAULT_LOCALE_ID;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (StringUtils.isBlank(localeId)) {
|
|
||||||
localeId = Constants.DEFAULT_LOCALE_ID;
|
|
||||||
}
|
|
||||||
return localeId;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
package com.sismics.util;
|
|
||||||
|
|
||||||
import java.text.MessageFormat;
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.MissingResourceException;
|
|
||||||
import java.util.ResourceBundle;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Message utilities.
|
|
||||||
*
|
|
||||||
* @author jtremeaux
|
|
||||||
*/
|
|
||||||
public class MessageUtil {
|
|
||||||
/**
|
|
||||||
* Returns a message formated in the specified locale.
|
|
||||||
* Returns **key** if no message is set for this key.
|
|
||||||
*
|
|
||||||
* @param locale Locale
|
|
||||||
* @param key Message key
|
|
||||||
* @param args Arguments of the message
|
|
||||||
* @return Formated message
|
|
||||||
*/
|
|
||||||
public static String getMessage(Locale locale, String key, Object... args) {
|
|
||||||
ResourceBundle resources = ResourceBundle.getBundle("messages", locale);
|
|
||||||
String message = null;
|
|
||||||
try {
|
|
||||||
message = resources.getString(key);
|
|
||||||
} catch (MissingResourceException e) {
|
|
||||||
message = "**" + key + "**";
|
|
||||||
}
|
|
||||||
return MessageFormat.format(message, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the resource bundle containing messages for the locale.
|
|
||||||
*
|
|
||||||
* @param locale Locale to use
|
|
||||||
* @return Resource bundle
|
|
||||||
*/
|
|
||||||
public static ResourceBundle getMessage(Locale locale) {
|
|
||||||
return ResourceBundle.getBundle("messages", locale);
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,7 +9,6 @@
|
|||||||
<class>com.sismics.docs.core.model.jpa.AuthenticationToken</class>
|
<class>com.sismics.docs.core.model.jpa.AuthenticationToken</class>
|
||||||
<class>com.sismics.docs.core.model.jpa.BaseFunction</class>
|
<class>com.sismics.docs.core.model.jpa.BaseFunction</class>
|
||||||
<class>com.sismics.docs.core.model.jpa.Config</class>
|
<class>com.sismics.docs.core.model.jpa.Config</class>
|
||||||
<class>com.sismics.docs.core.model.jpa.Locale</class>
|
|
||||||
<class>com.sismics.docs.core.model.jpa.User</class>
|
<class>com.sismics.docs.core.model.jpa.User</class>
|
||||||
<class>com.sismics.docs.core.model.jpa.RoleBaseFunction</class>
|
<class>com.sismics.docs.core.model.jpa.RoleBaseFunction</class>
|
||||||
<class>com.sismics.docs.core.model.jpa.Document</class>
|
<class>com.sismics.docs.core.model.jpa.Document</class>
|
||||||
|
@ -1 +1 @@
|
|||||||
db.version=0
|
db.version=1
|
@ -0,0 +1,5 @@
|
|||||||
|
alter table T_USER drop column USE_IDLOCALE_C;
|
||||||
|
alter table T_USER drop column USE_THEME_C;
|
||||||
|
alter table T_USER drop column USE_FIRSTCONNECTION_B;
|
||||||
|
drop table T_LOCALE;
|
||||||
|
update T_CONFIG set CFG_VALUE_C = '1' where CFG_ID_C = 'DB_VERSION';
|
@ -19,7 +19,6 @@ public class TestJpa extends BaseTransactionalTest {
|
|||||||
User user = new User();
|
User user = new User();
|
||||||
user.setUsername("username");
|
user.setUsername("username");
|
||||||
user.setEmail("toto@docs.com");
|
user.setEmail("toto@docs.com");
|
||||||
user.setLocaleId("fr");
|
|
||||||
user.setRoleId("admin");
|
user.setRoleId("admin");
|
||||||
user.setPrivateKey("AwesomePrivateKey");
|
user.setPrivateKey("AwesomePrivateKey");
|
||||||
String id = userDao.create(user);
|
String id = userDao.create(user);
|
||||||
|
@ -2,8 +2,6 @@ package com.sismics.security;
|
|||||||
|
|
||||||
import org.joda.time.DateTimeZone;
|
import org.joda.time.DateTimeZone;
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Anonymous principal.
|
* Anonymous principal.
|
||||||
*
|
*
|
||||||
@ -12,11 +10,6 @@ import java.util.Locale;
|
|||||||
public class AnonymousPrincipal implements IPrincipal {
|
public class AnonymousPrincipal implements IPrincipal {
|
||||||
public static final String ANONYMOUS = "anonymous";
|
public static final String ANONYMOUS = "anonymous";
|
||||||
|
|
||||||
/**
|
|
||||||
* User locale.
|
|
||||||
*/
|
|
||||||
private Locale locale;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User timezone.
|
* User timezone.
|
||||||
*/
|
*/
|
||||||
@ -44,20 +37,6 @@ public class AnonymousPrincipal implements IPrincipal {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Locale getLocale() {
|
|
||||||
return locale;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter of locale.
|
|
||||||
*
|
|
||||||
* @param locale locale
|
|
||||||
*/
|
|
||||||
public void setLocale(Locale locale) {
|
|
||||||
this.locale = locale;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DateTimeZone getDateTimeZone() {
|
public DateTimeZone getDateTimeZone() {
|
||||||
return dateTimeZone;
|
return dateTimeZone;
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
package com.sismics.security;
|
package com.sismics.security;
|
||||||
|
|
||||||
import org.joda.time.DateTimeZone;
|
|
||||||
|
|
||||||
import java.security.Principal;
|
import java.security.Principal;
|
||||||
import java.util.Locale;
|
|
||||||
|
import org.joda.time.DateTimeZone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface of principals.
|
* Interface of principals.
|
||||||
@ -25,13 +24,6 @@ public interface IPrincipal extends Principal {
|
|||||||
*/
|
*/
|
||||||
public String getId();
|
public String getId();
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the locale of the principal.
|
|
||||||
*
|
|
||||||
* @return Locale of the principal
|
|
||||||
*/
|
|
||||||
public Locale getLocale();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the timezone of the principal.
|
* Returns the timezone of the principal.
|
||||||
*
|
*
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
package com.sismics.security;
|
package com.sismics.security;
|
||||||
|
|
||||||
import org.joda.time.DateTimeZone;
|
|
||||||
|
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.joda.time.DateTimeZone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authenticated users principal.
|
* Authenticated users principal.
|
||||||
*
|
*
|
||||||
@ -21,11 +20,6 @@ public class UserPrincipal implements IPrincipal {
|
|||||||
*/
|
*/
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale of the principal.
|
|
||||||
*/
|
|
||||||
private Locale locale;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Timezone of the principal.
|
* Timezone of the principal.
|
||||||
*/
|
*/
|
||||||
@ -85,20 +79,6 @@ public class UserPrincipal implements IPrincipal {
|
|||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Locale getLocale() {
|
|
||||||
return locale;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Setter of locale.
|
|
||||||
*
|
|
||||||
* @param locale locale
|
|
||||||
*/
|
|
||||||
public void setLocale(Locale locale) {
|
|
||||||
this.locale = locale;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DateTimeZone getDateTimeZone() {
|
public DateTimeZone getDateTimeZone() {
|
||||||
return dateTimeZone;
|
return dateTimeZone;
|
||||||
|
@ -1,26 +1,31 @@
|
|||||||
package com.sismics.util.filter;
|
package com.sismics.util.filter;
|
||||||
|
|
||||||
import com.sismics.docs.core.constant.Constants;
|
import java.io.File;
|
||||||
import com.sismics.docs.core.model.context.AppContext;
|
import java.io.IOException;
|
||||||
import com.sismics.docs.core.util.DirectoryUtil;
|
import java.text.MessageFormat;
|
||||||
import com.sismics.docs.core.util.TransactionUtil;
|
|
||||||
import com.sismics.util.EnvironmentUtil;
|
import javax.persistence.EntityManager;
|
||||||
import com.sismics.util.context.ThreadLocalContext;
|
import javax.persistence.EntityTransaction;
|
||||||
import com.sismics.util.jpa.EMF;
|
import javax.servlet.Filter;
|
||||||
|
import javax.servlet.FilterChain;
|
||||||
|
import javax.servlet.FilterConfig;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.ServletRequest;
|
||||||
|
import javax.servlet.ServletResponse;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import org.apache.log4j.Level;
|
import org.apache.log4j.Level;
|
||||||
import org.apache.log4j.PatternLayout;
|
import org.apache.log4j.PatternLayout;
|
||||||
import org.apache.log4j.RollingFileAppender;
|
import org.apache.log4j.RollingFileAppender;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import com.sismics.docs.core.model.context.AppContext;
|
||||||
import javax.persistence.EntityTransaction;
|
import com.sismics.docs.core.util.DirectoryUtil;
|
||||||
import javax.servlet.*;
|
import com.sismics.docs.core.util.TransactionUtil;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import com.sismics.util.EnvironmentUtil;
|
||||||
import java.io.File;
|
import com.sismics.util.context.ThreadLocalContext;
|
||||||
import java.io.IOException;
|
import com.sismics.util.jpa.EMF;
|
||||||
import java.text.MessageFormat;
|
|
||||||
import java.util.Locale;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filter used to process a couple things in the request context.
|
* Filter used to process a couple things in the request context.
|
||||||
@ -35,9 +40,6 @@ public class RequestContextFilter implements Filter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(FilterConfig filterConfig) throws ServletException {
|
public void init(FilterConfig filterConfig) throws ServletException {
|
||||||
// Force the locale in order to not depend on the execution environment
|
|
||||||
Locale.setDefault(new Locale(Constants.DEFAULT_LOCALE_ID));
|
|
||||||
|
|
||||||
// Initialize the app directory
|
// Initialize the app directory
|
||||||
if (!filterConfig.getServletContext().getServerInfo().startsWith("Grizzly")) {
|
if (!filterConfig.getServletContext().getServerInfo().startsWith("Grizzly")) {
|
||||||
EnvironmentUtil.setWebappContext(true);
|
EnvironmentUtil.setWebappContext(true);
|
||||||
|
@ -3,7 +3,6 @@ package com.sismics.util.filter;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.servlet.Filter;
|
import javax.servlet.Filter;
|
||||||
@ -28,7 +27,6 @@ import com.sismics.docs.core.model.jpa.User;
|
|||||||
import com.sismics.docs.core.util.TransactionUtil;
|
import com.sismics.docs.core.util.TransactionUtil;
|
||||||
import com.sismics.security.AnonymousPrincipal;
|
import com.sismics.security.AnonymousPrincipal;
|
||||||
import com.sismics.security.UserPrincipal;
|
import com.sismics.security.UserPrincipal;
|
||||||
import com.sismics.util.LocaleUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This filter is used to authenticate the user having an active session via an authentication token stored in database.
|
* This filter is used to authenticate the user having an active session via an authentication token stored in database.
|
||||||
@ -155,10 +153,6 @@ public class TokenBasedSecurityFilter implements Filter {
|
|||||||
private void injectAuthenticatedUser(HttpServletRequest request, User user) {
|
private void injectAuthenticatedUser(HttpServletRequest request, User user) {
|
||||||
UserPrincipal userPrincipal = new UserPrincipal(user.getId(), user.getUsername());
|
UserPrincipal userPrincipal = new UserPrincipal(user.getId(), user.getUsername());
|
||||||
|
|
||||||
// Add locale
|
|
||||||
Locale locale = LocaleUtil.getLocale(user.getLocaleId());
|
|
||||||
userPrincipal.setLocale(locale);
|
|
||||||
|
|
||||||
// Add base functions
|
// Add base functions
|
||||||
RoleBaseFunctionDao userBaseFuction = new RoleBaseFunctionDao();
|
RoleBaseFunctionDao userBaseFuction = new RoleBaseFunctionDao();
|
||||||
Set<String> baseFunctionSet = userBaseFuction.findByRoleId(user.getRoleId());
|
Set<String> baseFunctionSet = userBaseFuction.findByRoleId(user.getRoleId());
|
||||||
@ -174,7 +168,6 @@ public class TokenBasedSecurityFilter implements Filter {
|
|||||||
*/
|
*/
|
||||||
private void injectAnonymousUser(HttpServletRequest request) {
|
private void injectAnonymousUser(HttpServletRequest request) {
|
||||||
AnonymousPrincipal anonymousPrincipal = new AnonymousPrincipal();
|
AnonymousPrincipal anonymousPrincipal = new AnonymousPrincipal();
|
||||||
anonymousPrincipal.setLocale(request.getLocale());
|
|
||||||
anonymousPrincipal.setDateTimeZone(DateTimeZone.forID(Constants.DEFAULT_TIMEZONE_ID));
|
anonymousPrincipal.setDateTimeZone(DateTimeZone.forID(Constants.DEFAULT_TIMEZONE_ID));
|
||||||
|
|
||||||
request.setAttribute(PRINCIPAL_ATTRIBUTE, anonymousPrincipal);
|
request.setAttribute(PRINCIPAL_ATTRIBUTE, anonymousPrincipal);
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
api.current_version=${project.version}
|
api.current_version=${project.version}
|
||||||
api.min_version=1.0
|
api.min_version=1.0
|
||||||
db.version=0
|
db.version=1
|
@ -1,41 +0,0 @@
|
|||||||
package com.sismics.docs.rest.resource;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.json.Json;
|
|
||||||
import javax.json.JsonArrayBuilder;
|
|
||||||
import javax.json.JsonObjectBuilder;
|
|
||||||
import javax.ws.rs.GET;
|
|
||||||
import javax.ws.rs.Path;
|
|
||||||
import javax.ws.rs.core.Response;
|
|
||||||
|
|
||||||
import com.sismics.docs.core.dao.jpa.LocaleDao;
|
|
||||||
import com.sismics.docs.core.model.jpa.Locale;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Locale REST resources.
|
|
||||||
*
|
|
||||||
* @author jtremeaux
|
|
||||||
*/
|
|
||||||
@Path("/locale")
|
|
||||||
public class LocaleResource extends BaseResource {
|
|
||||||
/**
|
|
||||||
* Returns the list of all locales.
|
|
||||||
*
|
|
||||||
* @return Response
|
|
||||||
*/
|
|
||||||
@GET
|
|
||||||
public Response list() {
|
|
||||||
LocaleDao localeDao = new LocaleDao();
|
|
||||||
List<Locale> localeList = localeDao.findAll();
|
|
||||||
JsonArrayBuilder items = Json.createArrayBuilder();
|
|
||||||
for (Locale locale : localeList) {
|
|
||||||
items.add(Json.createObjectBuilder()
|
|
||||||
.add("id", locale.getId()));
|
|
||||||
}
|
|
||||||
|
|
||||||
JsonObjectBuilder response = Json.createObjectBuilder()
|
|
||||||
.add("locales", items);
|
|
||||||
return Response.ok().entity(response.build()).build();
|
|
||||||
}
|
|
||||||
}
|
|
@ -42,7 +42,6 @@ import com.sismics.rest.exception.ForbiddenClientException;
|
|||||||
import com.sismics.rest.exception.ServerException;
|
import com.sismics.rest.exception.ServerException;
|
||||||
import com.sismics.rest.util.ValidationUtil;
|
import com.sismics.rest.util.ValidationUtil;
|
||||||
import com.sismics.security.UserPrincipal;
|
import com.sismics.security.UserPrincipal;
|
||||||
import com.sismics.util.LocaleUtil;
|
|
||||||
import com.sismics.util.filter.TokenBasedSecurityFilter;
|
import com.sismics.util.filter.TokenBasedSecurityFilter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -91,8 +90,6 @@ public class UserResource extends BaseResource {
|
|||||||
}
|
}
|
||||||
user.setCreateDate(new Date());
|
user.setCreateDate(new Date());
|
||||||
|
|
||||||
user.setLocaleId(LocaleUtil.getLocaleIdFromAcceptLanguage(request.getHeader("Accept-Language")));
|
|
||||||
|
|
||||||
// Create the user
|
// Create the user
|
||||||
UserDao userDao = new UserDao();
|
UserDao userDao = new UserDao();
|
||||||
try {
|
try {
|
||||||
@ -116,14 +113,12 @@ public class UserResource extends BaseResource {
|
|||||||
*
|
*
|
||||||
* @param password Password
|
* @param password Password
|
||||||
* @param email E-Mail
|
* @param email E-Mail
|
||||||
* @param firstConnection True if the user hasn't acknowledged the first connection wizard yet.
|
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
@POST
|
@POST
|
||||||
public Response update(
|
public Response update(
|
||||||
@FormParam("password") String password,
|
@FormParam("password") String password,
|
||||||
@FormParam("email") String email,
|
@FormParam("email") String email) {
|
||||||
@FormParam("first_connection") Boolean firstConnection) {
|
|
||||||
|
|
||||||
if (!authenticate()) {
|
if (!authenticate()) {
|
||||||
throw new ForbiddenClientException();
|
throw new ForbiddenClientException();
|
||||||
@ -139,9 +134,6 @@ public class UserResource extends BaseResource {
|
|||||||
if (email != null) {
|
if (email != null) {
|
||||||
user.setEmail(email);
|
user.setEmail(email);
|
||||||
}
|
}
|
||||||
if (firstConnection != null && hasBaseFunction(BaseFunction.ADMIN)) {
|
|
||||||
user.setFirstConnection(firstConnection);
|
|
||||||
}
|
|
||||||
|
|
||||||
user = userDao.update(user);
|
user = userDao.update(user);
|
||||||
|
|
||||||
@ -232,7 +224,7 @@ public class UserResource extends BaseResource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This resource is used to authenticate the user and create a user ession.
|
* This resource is used to authenticate the user and create a user session.
|
||||||
* The "session" is only used to identify the user, no other data is stored in the session.
|
* The "session" is only used to identify the user, no other data is stored in the session.
|
||||||
*
|
*
|
||||||
* @param username Username
|
* @param username Username
|
||||||
@ -402,9 +394,6 @@ public class UserResource extends BaseResource {
|
|||||||
if (!authenticate()) {
|
if (!authenticate()) {
|
||||||
response.add("anonymous", true);
|
response.add("anonymous", true);
|
||||||
|
|
||||||
String localeId = LocaleUtil.getLocaleIdFromAcceptLanguage(request.getHeader("Accept-Language"));
|
|
||||||
response.add("locale", localeId);
|
|
||||||
|
|
||||||
// Check if admin has the default password
|
// Check if admin has the default password
|
||||||
UserDao userDao = new UserDao();
|
UserDao userDao = new UserDao();
|
||||||
User adminUser = userDao.getById("admin");
|
User adminUser = userDao.getById("admin");
|
||||||
@ -416,9 +405,7 @@ public class UserResource extends BaseResource {
|
|||||||
UserDao userDao = new UserDao();
|
UserDao userDao = new UserDao();
|
||||||
User user = userDao.getById(principal.getId());
|
User user = userDao.getById(principal.getId());
|
||||||
response.add("username", user.getUsername())
|
response.add("username", user.getUsername())
|
||||||
.add("email", user.getEmail())
|
.add("email", user.getEmail());
|
||||||
.add("locale", user.getLocaleId())
|
|
||||||
.add("first_connection", user.isFirstConnection());
|
|
||||||
JsonArrayBuilder baseFunctions = Json.createArrayBuilder();
|
JsonArrayBuilder baseFunctions = Json.createArrayBuilder();
|
||||||
for (String baseFunction : ((UserPrincipal) principal).getBaseFunctionSet()) {
|
for (String baseFunction : ((UserPrincipal) principal).getBaseFunctionSet()) {
|
||||||
baseFunctions.add(baseFunction);
|
baseFunctions.add(baseFunction);
|
||||||
@ -453,8 +440,7 @@ public class UserResource extends BaseResource {
|
|||||||
|
|
||||||
JsonObjectBuilder response = Json.createObjectBuilder()
|
JsonObjectBuilder response = Json.createObjectBuilder()
|
||||||
.add("username", user.getUsername())
|
.add("username", user.getUsername())
|
||||||
.add("email", user.getEmail())
|
.add("email", user.getEmail());
|
||||||
.add("locale", user.getLocaleId());
|
|
||||||
return Response.ok().entity(response.build()).build();
|
return Response.ok().entity(response.build()).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
api.current_version=${project.version}
|
api.current_version=${project.version}
|
||||||
api.min_version=1.0
|
api.min_version=1.0
|
||||||
db.version=0
|
db.version=1
|
@ -1,3 +1,3 @@
|
|||||||
api.current_version=${project.version}
|
api.current_version=${project.version}
|
||||||
api.min_version=1.0
|
api.min_version=1.0
|
||||||
db.version=0
|
db.version=1
|
@ -1,27 +0,0 @@
|
|||||||
package com.sismics.docs.rest;
|
|
||||||
|
|
||||||
import javax.json.JsonArray;
|
|
||||||
import javax.json.JsonObject;
|
|
||||||
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test the locale resource.
|
|
||||||
*
|
|
||||||
* @author jtremeaux
|
|
||||||
*/
|
|
||||||
public class TestLocaleResource extends BaseJerseyTest {
|
|
||||||
/**
|
|
||||||
* Test the locale resource.
|
|
||||||
*
|
|
||||||
* @throws JSONException
|
|
||||||
*/
|
|
||||||
@Test
|
|
||||||
public void testLocaleResource() {
|
|
||||||
JsonObject json = target().path("/locale").request().get(JsonObject.class);
|
|
||||||
JsonArray locale = json.getJsonArray("locales");
|
|
||||||
Assert.assertTrue(locale.size() > 0);
|
|
||||||
}
|
|
||||||
}
|
|
@ -51,10 +51,8 @@ public class TestSecurity extends BaseJerseyTest {
|
|||||||
// User testsecurity changes his email OK
|
// User testsecurity changes his email OK
|
||||||
json = target().path("/user").request()
|
json = target().path("/user").request()
|
||||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, testSecurityAuthenticationToken)
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, testSecurityAuthenticationToken)
|
||||||
.post(Entity.form(
|
.post(Entity.form(new Form()
|
||||||
new Form()
|
.param("email", "testsecurity2@docs.com")), JsonObject.class);
|
||||||
.param("email", "testsecurity2@docs.com")
|
|
||||||
.param("locale", "en")), JsonObject.class);
|
|
||||||
Assert.assertEquals("ok", json.getString("status"));
|
Assert.assertEquals("ok", json.getString("status"));
|
||||||
|
|
||||||
// User testsecurity logs out
|
// User testsecurity logs out
|
||||||
|
@ -154,7 +154,6 @@ public class TestUserResource extends BaseJerseyTest {
|
|||||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, aliceAuthToken)
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, aliceAuthToken)
|
||||||
.get(JsonObject.class);
|
.get(JsonObject.class);
|
||||||
Assert.assertEquals("alice@docs.com", json.getString("email"));
|
Assert.assertEquals("alice@docs.com", json.getString("email"));
|
||||||
Assert.assertFalse(json.getBoolean("first_connection"));
|
|
||||||
Assert.assertFalse(json.getBoolean("is_default_password"));
|
Assert.assertFalse(json.getBoolean("is_default_password"));
|
||||||
|
|
||||||
// Check bob user information
|
// Check bob user information
|
||||||
@ -220,21 +219,20 @@ public class TestUserResource extends BaseJerseyTest {
|
|||||||
JsonObject json = target().path("/user").request()
|
JsonObject json = target().path("/user").request()
|
||||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminAuthenticationToken)
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminAuthenticationToken)
|
||||||
.get(JsonObject.class);
|
.get(JsonObject.class);
|
||||||
Assert.assertTrue(json.getBoolean("first_connection"));
|
|
||||||
Assert.assertTrue(json.getBoolean("is_default_password"));
|
Assert.assertTrue(json.getBoolean("is_default_password"));
|
||||||
|
|
||||||
// User admin updates his information
|
// User admin updates his information
|
||||||
json = target().path("/user").request()
|
json = target().path("/user").request()
|
||||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminAuthenticationToken)
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminAuthenticationToken)
|
||||||
.post(Entity.form(new Form()
|
.post(Entity.form(new Form()
|
||||||
.param("first_connection", "false")), JsonObject.class);
|
.param("email", "newadminemail@docs.com")), JsonObject.class);
|
||||||
Assert.assertEquals("ok", json.getString("status"));
|
Assert.assertEquals("ok", json.getString("status"));
|
||||||
|
|
||||||
// Check admin information update
|
// Check admin information update
|
||||||
json = target().path("/user").request()
|
json = target().path("/user").request()
|
||||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminAuthenticationToken)
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminAuthenticationToken)
|
||||||
.get(JsonObject.class);
|
.get(JsonObject.class);
|
||||||
Assert.assertFalse(json.getBoolean("first_connection"));
|
Assert.assertEquals("newadminemail@docs.com", json.getString("email"));
|
||||||
|
|
||||||
// User admin update admin_user1 information
|
// User admin update admin_user1 information
|
||||||
json = target().path("/user").request()
|
json = target().path("/user").request()
|
||||||
|
Loading…
Reference in New Issue
Block a user