diff --git a/.travis.yml b/.travis.yml
index 055f8e06..83caffe2 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,7 +1,8 @@
language: scala
sudo: true
scala:
-- 2.11.8
+- 2.11.11
+- 2.12.2
jdk:
- oraclejdk8
install: true
diff --git a/README.md b/README.md
index bfed00dd..3c98c1c1 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,8 @@ This plugin uses concepts from [securesocial2][] and [Play20StartApp][] and prov
Play Authenticate is cross-tested in Java 1.6, Java 1.7 (Up to `0.6.x`) and Java 1.8 (from `0.7.0`)
+Since Play 2.6 it's cross-compiled for both Scala 2.11 and 2.12.
+
Works fine with Play version
* `2.0.2` to `2.0.x` (last: `0.2.3-SNAPSHOT` - [2.0.x branch](https://github.com/joscha/play-authenticate/tree/2.0.x))
@@ -14,7 +16,8 @@ Works fine with Play version
* `2.2.0` to `2.2.x` (last: `0.5.4` - [2.2.x branch](https://github.com/joscha/play-authenticate/tree/2.2.x))
* `2.3.0` to `2.3.x` (last: `0.6.9` - [2.3.x branch](https://github.com/joscha/play-authenticate/tree/2.3.x))
* `2.4.0` to `2.4.x` (last: `0.7.x` - [2.4.x branch](https://github.com/joscha/play-authenticate/tree/2.4.x))
-* `2.5.0` to `2.5.x` (last: `0.8.x` - [master branch](https://github.com/joscha/play-authenticate/tree/master))
+* `2.5.0` to `2.5.x` (last: `0.8.x` - [2.5.x branch](https://github.com/joscha/play-authenticate/tree/2.5.x))
+* `2.6.0` to `2.6.x` (last: `0.9.x` - [master branch](https://github.com/joscha/play-authenticate/tree/master))
Releases are on [mvnrepository](http://mvnrepository.com/artifact/com.feth) and snapshots can be found on [sonatype](https://oss.sonatype.org/content/repositories/snapshots/com/feth/).
@@ -31,15 +34,15 @@ Play-Authenticate is available in [Maven Central](http://search.maven.org/#brows
```xml
com.feth
- play-authenticate_2.11
- 0.8.3
+ play-authenticate
+ 0.9.0
```
or
```scala
val appDependencies = Seq(
- "com.feth" % "play-authenticate_2.11" % "0.8.3"
+ "com.feth" %% "play-authenticate" % "0.9.0"
)
```
@@ -92,9 +95,20 @@ There is also a [sample application using Play!Authenticate with MongoDB](https:
* Portuguese (as of 2014-07-29)
* Chinese (as of 2017-04-18)
+-----------------------------------
+
+### Supported by Auth0
+
+If you want to easily add secure authentication to your Java projects, feel free to check out Auth0's Java SDK and free plan at [auth0.com/overview](https://auth0.com/overview?utm_source=GHsponsor&utm_medium=GHsponsor&utm_campaign=play-authenticate&utm_content=auth)
+
+------------------------------------
+
## Versions
* **TRUNK** [not released in the repository, yet]
* Fancy contributing something? :-)
+* **0.9.0** [tbd]
+ * Upgrade to Play 2.6 (thanks @KadekM)
+ * ATTENTION: This is for Play 2.6 - if you have Play 2.5, use a `0.8.x` version.
* **0.8.3** [2017-04-18]
* Chinese translation (thanks @frederick036)
* Fix for facebook refresh token
diff --git a/code/app/com/feth/play/module/pa/PlayAuthenticate.java b/code/app/com/feth/play/module/pa/PlayAuthenticate.java
index 095dfdb8..b6f8034a 100644
--- a/code/app/com/feth/play/module/pa/PlayAuthenticate.java
+++ b/code/app/com/feth/play/module/pa/PlayAuthenticate.java
@@ -4,9 +4,11 @@
import com.feth.play.module.pa.providers.AuthProvider;
import com.feth.play.module.pa.service.UserService;
import com.feth.play.module.pa.user.AuthUser;
-import play.Configuration;
+import com.typesafe.config.Config;
import play.Logger;
-import play.i18n.Messages;
+import play.cache.SyncCacheApi;
+import play.i18n.Lang;
+import play.i18n.MessagesApi;
import play.mvc.Call;
import play.mvc.Controller;
import play.mvc.Http;
@@ -16,7 +18,10 @@
import javax.inject.Inject;
import javax.inject.Singleton;
+import java.util.Arrays;
import java.util.Date;
+import java.util.List;
+import java.util.Locale;
@Singleton
public class PlayAuthenticate {
@@ -28,17 +33,24 @@ public class PlayAuthenticate {
private static final String SETTING_KEY_ACCOUNT_AUTO_LINK = "accountAutoLink";
private static final String SETTING_KEY_ACCOUNT_AUTO_MERGE = "accountAutoMerge";
-
-
- private Configuration config;
+ private List preferredLangs;
+ private Config config;
@Inject
- public PlayAuthenticate(final Configuration config, final Resolver resolver) {
+ public PlayAuthenticate(final Config config, final Resolver resolver, final MessagesApi messagesApi, final SyncCacheApi cacheApi) {
this.config = config;
this.resolver = resolver;
+ this.messagesApi = messagesApi;
+ this.cacheApi = cacheApi;
+
+ Locale englishLocale = new Locale("en");
+ Lang englishLang = new Lang(englishLocale);
+ preferredLangs = Arrays.asList(englishLang);
}
private Resolver resolver;
+ private final MessagesApi messagesApi;
+ private final SyncCacheApi cacheApi;
public Resolver getResolver() {
return resolver;
@@ -53,7 +65,7 @@ public void setUserService(final UserService service) {
public UserService getUserService() {
if (userService == null) {
throw new RuntimeException(
- Messages.get("playauthenticate.core.exception.no_user_service"));
+ messagesApi.preferred(preferredLangs).at("playauthenticate.core.exception.no_user_service"));
}
return userService;
}
@@ -64,7 +76,7 @@ public UserService getUserService() {
private static final String EXPIRES_KEY = "pa.u.exp";
private static final String SESSION_ID_KEY = "pa.s.id";
- public Configuration getConfiguration() {
+ public Config getConfiguration() {
return config
.getConfig(SETTING_KEY_PLAY_AUTHENTICATE);
}
@@ -211,14 +223,14 @@ private void storeUserInCache(final Session session,
public void storeInCache(final Session session, final String key,
final Object o) {
- play.cache.Cache.set(getCacheKey(session, key), o);
+ cacheApi.set(getCacheKey(session, key), o);
}
public T removeFromCache(final Session session, final String key) {
final T o = getFromCache(session, key);
final String k = getCacheKey(session, key);
- play.cache.Cache.remove(k);
+ cacheApi.remove(k);
return o;
}
@@ -229,7 +241,7 @@ private String getCacheKey(final Session session, final String key) {
@SuppressWarnings("unchecked")
public T getFromCache(final Session session, final String key) {
- return (T) play.cache.Cache.get(getCacheKey(session, key));
+ return (T) cacheApi.get(getCacheKey(session, key));
}
private AuthUser getUserFromCache(final Session session,
@@ -356,7 +368,7 @@ private AuthUser signupUser(final AuthUser u, final Session session, final AuthP
final Object id = getUserService().save(u);
if (id == null) {
throw new AuthException(
- Messages.get("playauthenticate.core.exception.signupuser_failed"));
+ messagesApi.preferred(preferredLangs).at("playauthenticate.core.exception.signupuser_failed"));
}
provider.afterSave(u, id, session);
return u;
@@ -368,7 +380,7 @@ public Result handleAuthentication(final String provider,
if (ap == null) {
// Provider wasn't found and/or user was fooling with our stuff -
// tell him off:
- return Controller.notFound(Messages.get(
+ return Controller.notFound(messagesApi.preferred(preferredLangs).at(
"playauthenticate.core.exception.provider_not_found",
provider));
}
@@ -452,7 +464,7 @@ public Result handleAuthentication(final String provider,
final Call c = getResolver().askMerge();
if (c == null) {
throw new RuntimeException(
- Messages.get(
+ messagesApi.preferred(preferredLangs).at(
"playauthenticate.core.exception.merge.controller_undefined",
SETTING_KEY_ACCOUNT_AUTO_MERGE));
}
@@ -484,7 +496,7 @@ public Result handleAuthentication(final String provider,
final Call c = getResolver().askLink();
if (c == null) {
throw new RuntimeException(
- Messages.get(
+ messagesApi.preferred(preferredLangs).at(
"playauthenticate.core.exception.link.controller_undefined",
SETTING_KEY_ACCOUNT_AUTO_LINK));
}
@@ -496,8 +508,8 @@ public Result handleAuthentication(final String provider,
return loginAndRedirect(context, loginUser);
} else {
- return Controller.internalServerError(Messages
- .get("playauthenticate.core.exception.general"));
+ return Controller.internalServerError(messagesApi
+ .preferred(preferredLangs).at("playauthenticate.core.exception.general"));
}
} catch (final AuthException e) {
final Call c = getResolver().onException(e);
diff --git a/code/app/com/feth/play/module/pa/providers/AuthProvider.java b/code/app/com/feth/play/module/pa/providers/AuthProvider.java
index 0209429d..b9db2271 100644
--- a/code/app/com/feth/play/module/pa/providers/AuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/AuthProvider.java
@@ -4,7 +4,7 @@
import com.feth.play.module.pa.exceptions.AuthException;
import com.feth.play.module.pa.user.AuthUser;
import com.feth.play.module.pa.user.SessionAuthUser;
-import play.Configuration;
+import com.typesafe.config.Config;
import play.Logger;
import play.inject.ApplicationLifecycle;
import play.mvc.Http.Context;
@@ -67,7 +67,7 @@ protected void onStart() {
final List neededSettings = neededSettingKeys();
if (neededSettings != null) {
- final Configuration c = getConfiguration();
+ final Config c = getConfiguration();
if (c == null) {
throw new RuntimeException("No settings for provider '"
+ getKey() + "' available at all!");
@@ -100,7 +100,7 @@ protected String getAbsoluteUrl(final Request request) {
public abstract String getKey();
- protected Configuration getConfiguration() {
+ protected Config getConfiguration() {
return this.auth.getConfiguration().getConfig(getKey());
}
diff --git a/code/app/com/feth/play/module/pa/providers/ext/ExternalAuthProvider.java b/code/app/com/feth/play/module/pa/providers/ext/ExternalAuthProvider.java
index 8c977407..a030459b 100644
--- a/code/app/com/feth/play/module/pa/providers/ext/ExternalAuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/ext/ExternalAuthProvider.java
@@ -37,7 +37,7 @@ protected List neededSettingKeys() {
}
protected long getTimeout() {
- return getConfiguration().getLong(SettingKeys.TIMEOUT, PlayAuthenticate.TIMEOUT);
+ return getConfiguration().getLong(SettingKeys.TIMEOUT);
}
private boolean useSecureRedirectUri() {
diff --git a/code/app/com/feth/play/module/pa/providers/oauth1/OAuth1AuthProvider.java b/code/app/com/feth/play/module/pa/providers/oauth1/OAuth1AuthProvider.java
index 14e6cae2..dd80071e 100644
--- a/code/app/com/feth/play/module/pa/providers/oauth1/OAuth1AuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/oauth1/OAuth1AuthProvider.java
@@ -7,7 +7,7 @@
import com.feth.play.module.pa.exceptions.AuthException;
import com.feth.play.module.pa.providers.ext.ExternalAuthProvider;
import com.feth.play.module.pa.user.AuthUserIdentity;
-import play.Configuration;
+import com.typesafe.config.Config;
import play.Logger;
import play.inject.ApplicationLifecycle;
import play.libs.oauth.OAuth;
@@ -75,6 +75,10 @@ public static abstract class Constants {
public static class SerializableRequestToken extends RequestToken implements Serializable {
private static final long serialVersionUID = 1L;
+ public SerializableRequestToken() {
+ super(null, null);
+ }
+
public SerializableRequestToken(RequestToken source) {
super(source.token, source.secret);
}
@@ -103,7 +107,7 @@ public Object authenticate(final Context context, final Object payload)
Logger.debug("Returned with URL: '" + uri + "'");
}
- final Configuration c = getConfiguration();
+ final Config c = getConfiguration();
final ConsumerKey key = new ConsumerKey(
c.getString(SettingKeys.CONSUMER_KEY),
@@ -170,7 +174,7 @@ protected JsonNode signedOauthGet(final String url, final OAuthCalculator calcul
protected OAuthCalculator getOAuthCalculator(final OAuth1AuthInfo info) {
final RequestToken token = new RequestToken(info.getAccessToken(),
info.getAccessTokenSecret());
- final Configuration c = getConfiguration();
+ final Config c = getConfiguration();
final ConsumerKey cK = new ConsumerKey(
c.getString(SettingKeys.CONSUMER_KEY),
c.getString(SettingKeys.CONSUMER_SECRET));
diff --git a/code/app/com/feth/play/module/pa/providers/oauth1/linkedin/LinkedinAuthUser.java b/code/app/com/feth/play/module/pa/providers/oauth1/linkedin/LinkedinAuthUser.java
index 490d0909..07e2bf78 100644
--- a/code/app/com/feth/play/module/pa/providers/oauth1/linkedin/LinkedinAuthUser.java
+++ b/code/app/com/feth/play/module/pa/providers/oauth1/linkedin/LinkedinAuthUser.java
@@ -1,18 +1,14 @@
package com.feth.play.module.pa.providers.oauth1.linkedin;
-import java.util.*;
-
-import org.apache.commons.lang3.StringUtils;
import com.fasterxml.jackson.databind.JsonNode;
-
import com.feth.play.module.pa.providers.oauth1.BasicOAuth1AuthUser;
import com.feth.play.module.pa.providers.oauth1.OAuth1AuthInfo;
-import com.feth.play.module.pa.user.BasicIdentity;
-import com.feth.play.module.pa.user.EducationsIdentity;
-import com.feth.play.module.pa.user.EmploymentsIdentity;
-import com.feth.play.module.pa.user.FirstLastNameIdentity;
-import com.feth.play.module.pa.user.PicturedIdentity;
-import com.feth.play.module.pa.user.ProfiledIdentity;
+import com.feth.play.module.pa.user.*;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
public class LinkedinAuthUser extends BasicOAuth1AuthUser implements
BasicIdentity, FirstLastNameIdentity, PicturedIdentity,
@@ -104,7 +100,7 @@ public LinkedinAuthUser(final JsonNode nodeInfo, final String email,
}
}
- private static EducationInfo makeEducation(final JsonNode node) {
+ private static EducationsIdentity.EducationInfo makeEducation(final JsonNode node) {
String id = null, schoolName = null, degree = null;
int startDateYear = 0, endDateYear = 0;
if (node.has(Constants.Education.ID)) {
@@ -129,7 +125,7 @@ private static EducationInfo makeEducation(final JsonNode node) {
endDateYear);
}
- private static EmploymentInfo makeEmployment(final JsonNode node) {
+ private static EmploymentsIdentity.EmploymentInfo makeEmployment(final JsonNode node) {
String id = null, title = null, summary = null, companyName = null;
int startDateMonth = 0, startDateYear = 0, endDateMonth = 0, endDateYear = 0;
boolean isCurrent = false;
diff --git a/code/app/com/feth/play/module/pa/providers/oauth2/OAuth2AuthProvider.java b/code/app/com/feth/play/module/pa/providers/oauth2/OAuth2AuthProvider.java
index 5db0a889..77cf5dd4 100644
--- a/code/app/com/feth/play/module/pa/providers/oauth2/OAuth2AuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/oauth2/OAuth2AuthProvider.java
@@ -5,12 +5,12 @@
import com.feth.play.module.pa.providers.ext.ExternalAuthProvider;
import com.feth.play.module.pa.user.AuthUser;
import com.feth.play.module.pa.user.AuthUserIdentity;
+import com.typesafe.config.Config;
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.message.BasicNameValuePair;
-import play.Configuration;
import play.Logger;
-import play.i18n.Messages;
+import play.i18n.MessagesApi;
import play.inject.ApplicationLifecycle;
import play.libs.ws.WSClient;
import play.libs.ws.WSRequest;
@@ -42,10 +42,12 @@ public QueryParam(String param, String value) {
protected static final String CONTENT_TYPE = "Content-Type";
protected final WSClient wsClient;
+ private final MessagesApi messagesApi;
- public OAuth2AuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient) {
+ public OAuth2AuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient, final MessagesApi messagesApi) {
super(auth, lifecycle);
this.wsClient = wsClient;
+ this.messagesApi = messagesApi;
}
@Override
@@ -94,7 +96,7 @@ protected WSResponse fetchAuthResponse(String url, QueryParam...params) throws A
final List queryParams = Arrays.asList(params);
final WSRequest request = wsClient.url(url);
for(QueryParam param : queryParams) {
- request.setQueryParameter(param.param, param.value);
+ request.addQueryParameter(param.param, param.value);
}
try {
@@ -106,7 +108,7 @@ protected WSResponse fetchAuthResponse(String url, QueryParam...params) throws A
}
}
- protected String getAccessTokenParams(final Configuration c,
+ protected String getAccessTokenParams(final Config c,
final String code, Request request) throws ResolverMissingException {
final List params = getParams(request, c);
params.add(new BasicNameValuePair(Constants.CLIENT_SECRET, c
@@ -124,13 +126,13 @@ protected Map getHeaders() {
protected I getAccessToken(final String code, final Request request)
throws AccessTokenException, ResolverMissingException {
- final Configuration c = getConfiguration();
+ final Config c = getConfiguration();
final String params = getAccessTokenParams(c, code, request);
final String url = c.getString(SettingKeys.ACCESS_TOKEN_URL);
final WSRequest wrh = wsClient.url(url);
- wrh.setHeader(CONTENT_TYPE, "application/x-www-form-urlencoded");
+ wrh.addHeader(CONTENT_TYPE, "application/x-www-form-urlencoded");
for(final Map.Entry header : getHeaders().entrySet()) {
- wrh.setHeader(header.getKey(), header.getValue());
+ wrh.addHeader(header.getKey(), header.getValue());
}
try {
@@ -146,12 +148,12 @@ protected abstract I buildInfo(final WSResponse r)
protected String getAuthUrl(final Request request, final String state)
throws AuthException {
- final Configuration c = getConfiguration();
+ final Config c = getConfiguration();
final List params = getAuthParams(c, request, state);
return generateURI(c.getString(SettingKeys.AUTHORIZATION_URL), params);
}
- protected List getAuthParams(final Configuration c,
+ protected List getAuthParams(final Config c,
final Request request, final String state) throws AuthException {
final List params = getParams(request, c);
if (c.getString(SettingKeys.SCOPE) != null) {
@@ -179,7 +181,7 @@ protected List getAuthParams(final Configuration c,
}
protected List getParams(final Request request,
- final Configuration c) throws ResolverMissingException {
+ final Config c) throws ResolverMissingException {
final List params = new ArrayList();
params.add(new BasicNameValuePair(Constants.CLIENT_ID, c
.getString(SettingKeys.CLIENT_ID)));
@@ -226,7 +228,7 @@ public Object authenticate(final Context context, final Object payload)
final String callbackState = request.getQueryString(Constants.STATE);
if(!storedState.equals(UUID.fromString(callbackState))) {
// the return callback may have been forged
- throw new AuthException(Messages.get("playauthenticate.core.exception.oauth2.state_param_forged"));
+ throw new AuthException(messagesApi.preferred(request).at("playauthenticate.core.exception.oauth2.state_param_forged"));
}
final String code = request.getQueryString(Constants.CODE);
final I info = getAccessToken(code, request);
diff --git a/code/app/com/feth/play/module/pa/providers/oauth2/eventbrite/EventBriteAuthProvider.java b/code/app/com/feth/play/module/pa/providers/oauth2/eventbrite/EventBriteAuthProvider.java
index 0a1efc29..5a431449 100644
--- a/code/app/com/feth/play/module/pa/providers/oauth2/eventbrite/EventBriteAuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/oauth2/eventbrite/EventBriteAuthProvider.java
@@ -6,6 +6,7 @@
import com.feth.play.module.pa.exceptions.AuthException;
import com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider;
import play.Logger;
+import play.i18n.MessagesApi;
import play.inject.ApplicationLifecycle;
import play.libs.ws.WSClient;
import play.libs.ws.WSResponse;
@@ -27,8 +28,8 @@ public class EventBriteAuthProvider extends
private static final String TOKEN = "token";
@Inject
- public EventBriteAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient) {
- super(auth, lifecycle, wsClient);
+ public EventBriteAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient, final MessagesApi messagesApi) {
+ super(auth, lifecycle, wsClient, messagesApi);
}
diff --git a/code/app/com/feth/play/module/pa/providers/oauth2/facebook/FacebookAuthProvider.java b/code/app/com/feth/play/module/pa/providers/oauth2/facebook/FacebookAuthProvider.java
index 3d0d80fc..1aff1b27 100644
--- a/code/app/com/feth/play/module/pa/providers/oauth2/facebook/FacebookAuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/oauth2/facebook/FacebookAuthProvider.java
@@ -5,11 +5,11 @@
import com.feth.play.module.pa.exceptions.AccessTokenException;
import com.feth.play.module.pa.exceptions.AuthException;
import com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider;
+import com.typesafe.config.Config;
import org.apache.http.NameValuePair;
-import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.message.BasicNameValuePair;
-import play.Configuration;
import play.Logger;
+import play.i18n.MessagesApi;
import play.inject.ApplicationLifecycle;
import play.libs.ws.WSClient;
import play.libs.ws.WSResponse;
@@ -17,10 +17,7 @@
import javax.inject.Inject;
import javax.inject.Singleton;
-import java.net.URI;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
@Singleton
public class FacebookAuthProvider extends
@@ -36,8 +33,8 @@ public class FacebookAuthProvider extends
private static final String USER_INFO_FIELDS_SETTING_KEY = "userInfoFields";
@Inject
- public FacebookAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient) {
- super(auth, lifecycle, wsClient);
+ public FacebookAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient, final MessagesApi messagesApi) {
+ super(auth, lifecycle, wsClient, messagesApi);
}
@@ -46,7 +43,7 @@ public static abstract class SettingKeys extends
public static final String DISPLAY = "display";
}
- public static abstract class FacebookConstants extends Constants {
+ public static abstract class FacebookConstants extends OAuth2AuthProvider.Constants {
public static final String DISPLAY = "display";
}
@@ -96,7 +93,7 @@ protected FacebookAuthInfo buildInfo(final WSResponse r) throws AccessTokenExcep
}
@Override
- protected List getAuthParams(final Configuration c,
+ protected List getAuthParams(final Config c,
final Request request, final String state) throws AuthException {
final List params = super.getAuthParams(c, request, state);
diff --git a/code/app/com/feth/play/module/pa/providers/oauth2/foursquare/FoursquareAuthProvider.java b/code/app/com/feth/play/module/pa/providers/oauth2/foursquare/FoursquareAuthProvider.java
index e882373f..9cf9bdef 100644
--- a/code/app/com/feth/play/module/pa/providers/oauth2/foursquare/FoursquareAuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/oauth2/foursquare/FoursquareAuthProvider.java
@@ -7,6 +7,7 @@
import com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider;
import com.feth.play.module.pa.user.AuthUserIdentity;
import play.Logger;
+import play.i18n.MessagesApi;
import play.inject.ApplicationLifecycle;
import play.libs.ws.WSClient;
import play.libs.ws.WSResponse;
@@ -25,8 +26,8 @@ public class FoursquareAuthProvider extends
private static final String VERSION = "20120617";
@Inject
- public FoursquareAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient) {
- super(auth, lifecycle, wsClient);
+ public FoursquareAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient, final MessagesApi messagesApi) {
+ super(auth, lifecycle, wsClient, messagesApi);
}
@Override
diff --git a/code/app/com/feth/play/module/pa/providers/oauth2/github/GithubAuthProvider.java b/code/app/com/feth/play/module/pa/providers/oauth2/github/GithubAuthProvider.java
index 4fdadf51..1ca4a551 100644
--- a/code/app/com/feth/play/module/pa/providers/oauth2/github/GithubAuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/oauth2/github/GithubAuthProvider.java
@@ -5,6 +5,7 @@
import com.feth.play.module.pa.exceptions.AccessTokenException;
import com.feth.play.module.pa.exceptions.AuthException;
import com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider;
+import play.i18n.MessagesApi;
import play.inject.ApplicationLifecycle;
import play.libs.ws.WSClient;
import play.libs.ws.WSResponse;
@@ -23,8 +24,8 @@ public class GithubAuthProvider extends
private static final String USER_INFO_URL_SETTING_KEY = "userInfoUrl";
@Inject
- public GithubAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient) {
- super(auth, lifecycle, wsClient);
+ public GithubAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient, final MessagesApi messagesApi) {
+ super(auth, lifecycle, wsClient, messagesApi);
}
@Override
diff --git a/code/app/com/feth/play/module/pa/providers/oauth2/google/GoogleAuthProvider.java b/code/app/com/feth/play/module/pa/providers/oauth2/google/GoogleAuthProvider.java
index 9958c783..7b273284 100644
--- a/code/app/com/feth/play/module/pa/providers/oauth2/google/GoogleAuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/oauth2/google/GoogleAuthProvider.java
@@ -6,6 +6,7 @@
import com.feth.play.module.pa.exceptions.AuthException;
import com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider;
import play.Logger;
+import play.i18n.MessagesApi;
import play.inject.ApplicationLifecycle;
import play.libs.ws.WSClient;
import play.libs.ws.WSResponse;
@@ -22,8 +23,8 @@ public class GoogleAuthProvider extends
private static final String USER_INFO_URL_SETTING_KEY = "userInfoUrl";
@Inject
- public GoogleAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient) {
- super(auth, lifecycle, wsClient);
+ public GoogleAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient, final MessagesApi messagesApi) {
+ super(auth, lifecycle, wsClient, messagesApi);
}
@Override
diff --git a/code/app/com/feth/play/module/pa/providers/oauth2/pocket/PocketAuthInfo.java b/code/app/com/feth/play/module/pa/providers/oauth2/pocket/PocketAuthInfo.java
index e16f8f10..153ebbee 100644
--- a/code/app/com/feth/play/module/pa/providers/oauth2/pocket/PocketAuthInfo.java
+++ b/code/app/com/feth/play/module/pa/providers/oauth2/pocket/PocketAuthInfo.java
@@ -1,10 +1,10 @@
package com.feth.play.module.pa.providers.oauth2.pocket;
-import java.util.Map;
-
import com.feth.play.module.pa.providers.oauth2.OAuth2AuthInfo;
import com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider.Constants;
+import java.util.Map;
+
public class PocketAuthInfo extends OAuth2AuthInfo {
private static final long serialVersionUID = 1L;
@@ -13,8 +13,7 @@ public class PocketAuthInfo extends OAuth2AuthInfo {
public static final String USERNAME = "username";
public PocketAuthInfo(final Map map) {
- super(map.containsKey(Constants.ACCESS_TOKEN) ? map
- .get(Constants.ACCESS_TOKEN) : null);
+ super(map.getOrDefault(Constants.ACCESS_TOKEN, null));
this.userName = map.get(USERNAME);
}
diff --git a/code/app/com/feth/play/module/pa/providers/oauth2/pocket/PocketAuthProvider.java b/code/app/com/feth/play/module/pa/providers/oauth2/pocket/PocketAuthProvider.java
index 9f52916b..5f9b24b0 100644
--- a/code/app/com/feth/play/module/pa/providers/oauth2/pocket/PocketAuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/oauth2/pocket/PocketAuthProvider.java
@@ -8,10 +8,11 @@
import com.feth.play.module.pa.exceptions.ResolverMissingException;
import com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider;
import com.feth.play.module.pa.user.AuthUserIdentity;
+import com.typesafe.config.Config;
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.message.BasicNameValuePair;
-import play.Configuration;
+import play.i18n.MessagesApi;
import play.inject.ApplicationLifecycle;
import play.libs.ws.WSClient;
import play.libs.ws.WSResponse;
@@ -32,8 +33,8 @@ public class PocketAuthProvider extends
public static final String PROVIDER_KEY = "pocket";
@Inject
- public PocketAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient) {
- super(auth, lifecycle, wsClient);
+ public PocketAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient, final MessagesApi messagesApi) {
+ super(auth, lifecycle, wsClient, messagesApi);
}
public static abstract class SettingKeys extends
@@ -42,7 +43,7 @@ public static abstract class SettingKeys extends
public static final String CONSUMER_KEY = "consumerKey";
}
- public static abstract class PocketConstants extends Constants {
+ public static abstract class PocketConstants extends OAuth2AuthProvider.Constants {
public static final String CONSUMER_KEY = "consumer_key";
public static final String REQUEST_TOKEN = "request_token";
}
@@ -91,7 +92,7 @@ protected AuthUserIdentity transform(final PocketAuthInfo info,
}
@Override
- protected String getAccessTokenParams(final Configuration c,
+ protected String getAccessTokenParams(final Config c,
final String code, final Request request) {
final List params = new ArrayList();
params.add(new BasicNameValuePair(PocketConstants.CONSUMER_KEY, c
@@ -102,13 +103,13 @@ protected String getAccessTokenParams(final Configuration c,
}
private String getRequestToken(final Request request) throws AuthException {
- final Configuration c = getConfiguration();
+ final Config c = getConfiguration();
final List params = getRequestTokenParams(request, c);
try {
final WSResponse r = wsClient.url(c.getString(SettingKeys.REQUEST_TOKEN_URL))
- .setHeader("Content-Type", "application/json")
- .setHeader("X-Accept", "application/json")
+ .addHeader("Content-Type", "application/json")
+ .addHeader("X-Accept", "application/json")
.post(encodeParamsAsJson(params)).toCompletableFuture().get(getTimeout(), TimeUnit.MILLISECONDS);
if (r.getStatus() >= 400) {
@@ -122,7 +123,7 @@ private String getRequestToken(final Request request) throws AuthException {
}
private List getRequestTokenParams(final Request request,
- final Configuration c) throws ResolverMissingException {
+ final Config c) throws ResolverMissingException {
final List params = new ArrayList();
params.add(new BasicNameValuePair(PocketConstants.CONSUMER_KEY, c
.getString(SettingKeys.CONSUMER_KEY)));
@@ -132,7 +133,7 @@ private List getRequestTokenParams(final Request request,
}
@Override
- protected List getAuthParams(final Configuration c,
+ protected List getAuthParams(final Config c,
final Request request, final String state) throws AuthException {
final List params = new ArrayList();
params.add(new BasicNameValuePair(PocketConstants.CONSUMER_KEY, c
diff --git a/code/app/com/feth/play/module/pa/providers/oauth2/untappd/UntappdAuthProvider.java b/code/app/com/feth/play/module/pa/providers/oauth2/untappd/UntappdAuthProvider.java
index 8711326a..fcf41d14 100755
--- a/code/app/com/feth/play/module/pa/providers/oauth2/untappd/UntappdAuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/oauth2/untappd/UntappdAuthProvider.java
@@ -7,10 +7,11 @@
import com.feth.play.module.pa.exceptions.ResolverMissingException;
import com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider;
import com.google.inject.Inject;
+import com.typesafe.config.Config;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
-import play.Configuration;
import play.Logger;
+import play.i18n.MessagesApi;
import play.inject.ApplicationLifecycle;
import play.libs.ws.WSClient;
import play.libs.ws.WSResponse;
@@ -49,8 +50,8 @@ public class UntappdAuthProvider extends
// "http://localhost:9000/authenticate/untappd";
@Inject
- public UntappdAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient) {
- super(auth, lifecycle, wsClient);
+ public UntappdAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient, final MessagesApi messagesApi) {
+ super(auth, lifecycle, wsClient, messagesApi);
}
@Override
@@ -92,20 +93,20 @@ protected String getRedirectUriKey() {
protected UntappdAuthInfo getAccessToken(final String code,
final Request request) throws AccessTokenException, ResolverMissingException {
- final Configuration c = getConfiguration();
+ final Config c = getConfiguration();
final String url = c.getString(SettingKeys.ACCESS_TOKEN_URL);
try {
final WSResponse r = wsClient
.url(url)
- .setQueryParameter(Constants.CLIENT_ID,
+ .addQueryParameter(Constants.CLIENT_ID,
c.getString(SettingKeys.CLIENT_ID))
- .setQueryParameter(Constants.CLIENT_SECRET,
+ .addQueryParameter(Constants.CLIENT_SECRET,
c.getString(SettingKeys.CLIENT_SECRET))
- .setQueryParameter(Constants.RESPONSE_TYPE, Constants.CODE)
- .setQueryParameter(Constants.CODE, code)
- .setQueryParameter(getRedirectUriKey(), getRedirectUrl(request))
+ .addQueryParameter(Constants.RESPONSE_TYPE, Constants.CODE)
+ .addQueryParameter(Constants.CODE, code)
+ .addQueryParameter(getRedirectUriKey(), getRedirectUrl(request))
// we use GET here
.get().toCompletableFuture().get(getTimeout(), TimeUnit.MILLISECONDS);
@@ -117,7 +118,7 @@ protected UntappdAuthInfo getAccessToken(final String code,
@Override
protected List getParams(final Request request,
- final Configuration c) throws ResolverMissingException {
+ final Config c) throws ResolverMissingException {
final List params = super.getParams(request, c);
params.add(new BasicNameValuePair(Constants.CLIENT_SECRET, c
diff --git a/code/app/com/feth/play/module/pa/providers/oauth2/vk/VkAuthProvider.java b/code/app/com/feth/play/module/pa/providers/oauth2/vk/VkAuthProvider.java
index 9a41995c..5b716a5e 100644
--- a/code/app/com/feth/play/module/pa/providers/oauth2/vk/VkAuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/oauth2/vk/VkAuthProvider.java
@@ -6,6 +6,7 @@
import com.feth.play.module.pa.exceptions.AuthException;
import com.feth.play.module.pa.providers.oauth2.OAuth2AuthProvider;
import play.Logger;
+import play.i18n.MessagesApi;
import play.inject.ApplicationLifecycle;
import play.libs.ws.WSClient;
import play.libs.ws.WSResponse;
@@ -30,8 +31,8 @@ public class VkAuthProvider extends OAuth2AuthProvider {
private static final String BODY_RESPONSE_KEY = "response";
@Inject
- public VkAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient) {
- super(auth, lifecycle, wsClient);
+ public VkAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final WSClient wsClient, final MessagesApi messagesApi) {
+ super(auth, lifecycle, wsClient, messagesApi);
}
@Override
diff --git a/code/app/com/feth/play/module/pa/providers/openid/OpenIdAuthProvider.java b/code/app/com/feth/play/module/pa/providers/openid/OpenIdAuthProvider.java
index f1525bf9..73e697b2 100644
--- a/code/app/com/feth/play/module/pa/providers/openid/OpenIdAuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/openid/OpenIdAuthProvider.java
@@ -5,7 +5,7 @@
import com.feth.play.module.pa.providers.ext.ExternalAuthProvider;
import com.feth.play.module.pa.providers.openid.exceptions.NoOpenIdAuthException;
import com.feth.play.module.pa.providers.openid.exceptions.OpenIdConnectException;
-import play.Configuration;
+import com.typesafe.config.Config;
import play.Logger;
import play.api.libs.openid.OpenIDError;
import play.inject.ApplicationLifecycle;
@@ -20,6 +20,7 @@
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Future;
+import java.util.stream.Collectors;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
@@ -101,10 +102,10 @@ public Object authenticate(final Context context, final Object payload)
}
private Map getAttributes(final String subKey) {
- final Configuration attributes = getConfiguration().getConfig(
+ final Config attributes = getConfiguration().getConfig(
SettingKeys.ATTRIBUTES + "." + subKey);
if (attributes != null) {
- final Set keys = attributes.keys();
+ final Set keys = attributes.entrySet().stream().map(x -> x.getKey()).collect(Collectors.toSet());
final Map ret = new HashMap(
keys.size());
for (final String key : keys) {
diff --git a/code/app/com/feth/play/module/pa/providers/password/UsernamePasswordAuthProvider.java b/code/app/com/feth/play/module/pa/providers/password/UsernamePasswordAuthProvider.java
index b374b43d..e02ee14f 100644
--- a/code/app/com/feth/play/module/pa/providers/password/UsernamePasswordAuthProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/password/UsernamePasswordAuthProvider.java
@@ -13,7 +13,6 @@
import com.feth.play.module.pa.user.AuthUser;
import com.feth.play.module.pa.user.NameIdentity;
-import play.data.Form;
import play.inject.ApplicationLifecycle;
import play.mvc.Call;
import play.mvc.Http;
diff --git a/code/app/com/feth/play/module/pa/providers/wwwauth/WWWAuthenticateProvider.java b/code/app/com/feth/play/module/pa/providers/wwwauth/WWWAuthenticateProvider.java
index a5e074d1..49cbc38b 100644
--- a/code/app/com/feth/play/module/pa/providers/wwwauth/WWWAuthenticateProvider.java
+++ b/code/app/com/feth/play/module/pa/providers/wwwauth/WWWAuthenticateProvider.java
@@ -99,7 +99,7 @@ private Result deny(Context context) {
@Override
public Object authenticate(Context context, Object payload) throws AuthException {
- String auth = context.request().getHeader("Authorization");
+ String auth = context.request().header("Authorization").get();
if (auth == null) {
return deny(context);
diff --git a/code/app/com/feth/play/module/pa/user/EducationsIdentity.java b/code/app/com/feth/play/module/pa/user/EducationsIdentity.java
index f5bd0bc1..1a87e382 100644
--- a/code/app/com/feth/play/module/pa/user/EducationsIdentity.java
+++ b/code/app/com/feth/play/module/pa/user/EducationsIdentity.java
@@ -5,7 +5,7 @@
public interface EducationsIdentity {
- public static class EducationInfo implements Serializable {
+ class EducationInfo implements Serializable {
protected String id;
protected String schoolName;
protected String degree;
diff --git a/code/build.sbt b/code/build.sbt
index a5a224fb..a172fafa 100644
--- a/code/build.sbt
+++ b/code/build.sbt
@@ -4,15 +4,18 @@ name := "play-authenticate"
javacOptions ++= Seq("-Werror")
-scalaVersion := "2.11.8"
+scalaVersion := "2.12.2"
+crossScalaVersions := Seq("2.11.11", "2.12.2")
libraryDependencies ++= Seq(
"org.apache.httpcomponents" % "httpclient" % "4.5",
- "com.feth" %% "play-easymail" % "0.8.1",
+ "com.feth" %% "play-easymail" % "0.9.3",
"org.mindrot" % "jbcrypt" % "0.3m",
"org.apache.commons" % "commons-lang3" % "3.4",
- cache,
- javaWs
+ cacheApi,
+ javaWs,
+ openId,
+ guice
)
// add resolver for easymail snapshots
diff --git a/code/project/plugins.sbt b/code/project/plugins.sbt
index 78d459da..760f3e67 100644
--- a/code/project/plugins.sbt
+++ b/code/project/plugins.sbt
@@ -5,10 +5,10 @@ logLevel := Level.Warn
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
// Use the Play sbt plugin for Play projects
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % Option(System.getProperty("play.version")).getOrElse("2.5.14"))
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % Option(System.getProperty("play.version")).getOrElse("2.6.12"))
-addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.0")
+addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.0")
-addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.0")
+addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.7")
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")
diff --git a/code/release.sh b/code/release.sh
index 73de169f..235e8b37 100755
--- a/code/release.sh
+++ b/code/release.sh
@@ -1,2 +1,2 @@
#!/bin/sh
-sbt --info release
+sbt --info +release
diff --git a/code/version.sbt b/code/version.sbt
index b3a3fa9e..338b0ba2 100644
--- a/code/version.sbt
+++ b/code/version.sbt
@@ -1 +1 @@
-version in ThisBuild := "0.8.4-SNAPSHOT"
\ No newline at end of file
+version in ThisBuild := "0.9.0-SNAPSHOT"
diff --git a/samples/java/Getting Started.md b/samples/java/Getting Started.md
index dae3bd46..b434627b 100644
--- a/samples/java/Getting Started.md
+++ b/samples/java/Getting Started.md
@@ -1,7 +1,7 @@
-#Getting Started
+# Getting Started
-##Importing the Plugin
+## Importing the Plugin
---
Add Play-Authenticate to your app dependencies. This is done by modifying the `project/Build.scala` file.
@@ -34,7 +34,7 @@ Add `"com.feth" %% "play-authenticate" % "0.8.0-SNAPSHOT"` (`0.8.0` might
}
-##Configuration File
+## Configuration File
---
Create a new file `play-authenticate/mine.conf` in your conf folder. Include this file in your `application.conf` by adding the following line to it:
@@ -100,7 +100,7 @@ For a real application you can use the following template ([source](https://gith
}
-##Creating the necessary views
+## Creating the necessary views
---
You have to integrate Play-Authenticate into your views by yourself. Play-Authenticate provides some template helpers to do this.
@@ -151,7 +151,7 @@ This second example displays some account information:
}
}
-##Routes
+## Routes
---
Add the following routes to your `conf/routes` file:
@@ -171,7 +171,7 @@ Below you can see an example implementation of this method (this.auth is instanc
}
-##Configure the Resolver
+## Configure the Resolver
---
Play-Authenticate needs some pages provided by your application. You configure these pages by providing
@@ -249,7 +249,7 @@ TODO explain Resolver interface and its methods
Of course you have to create the pages to which the resolver refers by yourself.
-##User Service
+## User Service
---
We yet have to tell Play-Authenticate how to store users in a database. This is done by creating a sub class
@@ -331,7 +331,7 @@ Here is an example implementation of the UserServicePlugin:
}
-##Adding Authentication Providers
+## Adding Authentication Providers
---
### Google Authentication Provider
@@ -378,7 +378,7 @@ own keys. The keys above are not valid.
TODO short description for other providers.
-##Adding Access Control
+## Adding Access Control
---
TODO
diff --git a/samples/java/play-authenticate-simple-oauth/build.sbt b/samples/java/play-authenticate-simple-oauth/build.sbt
index 01b91098..98cea280 100644
--- a/samples/java/play-authenticate-simple-oauth/build.sbt
+++ b/samples/java/play-authenticate-simple-oauth/build.sbt
@@ -2,14 +2,16 @@ organization := "com.feth"
name := "play-authenticate-simple-oauth"
-scalaVersion := "2.11.8"
+scalaVersion := "2.12.2"
version := "1.0-SNAPSHOT"
val appDependencies = Seq(
// Comment the next line for local development of the Play Authentication core:
- "com.feth" %% "play-authenticate" % "0.8.3",
- cache,
+ // Use the latest release version when copying this code, e.g. "0.9.0"
+ "com.feth" %% "play-authenticate" % "0.9.0-SNAPSHOT",
+ cacheApi,
+ ehcache,
javaWs
)
diff --git a/samples/java/play-authenticate-simple-oauth/conf/application.conf b/samples/java/play-authenticate-simple-oauth/conf/application.conf
index 0013bb35..dbaf2fab 100644
--- a/samples/java/play-authenticate-simple-oauth/conf/application.conf
+++ b/samples/java/play-authenticate-simple-oauth/conf/application.conf
@@ -5,7 +5,8 @@
# ~~~~~
# The secret key is used to secure cryptographics functions.
# If you deploy your application to several instances be sure to use the same key!
-play.crypto.secret="y]Z5;`T0=F3mAda1lW[r5jFWCw9stMiBnShjPU;59l7cwA9LX1abrprOgTP/VCDQ"
+play.http.secret.key="changeme"
+play.http.secret.key=${?APPLICATION_SECRET}
# The application languages
# ~~~~~
diff --git a/samples/java/play-authenticate-simple-oauth/project/plugins.sbt b/samples/java/play-authenticate-simple-oauth/project/plugins.sbt
index 1ecfe74e..e576d043 100644
--- a/samples/java/play-authenticate-simple-oauth/project/plugins.sbt
+++ b/samples/java/play-authenticate-simple-oauth/project/plugins.sbt
@@ -5,14 +5,14 @@ logLevel := Level.Warn
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
// Use the Play sbt plugin for Play projects
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % Option(System.getProperty("play.version")).getOrElse("2.5.14"))
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % Option(System.getProperty("play.version")).getOrElse("2.6.12"))
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "3.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")
// Uncomment the next line for local development of the Play Authentication core:
-//addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.0")
+//addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.0")
// Uncomment the next line for local development of the Play Authentication core:
-//addSbtPlugin("com.github.gseitz" % "sbt-release" % "0.8.5")
+//addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.7")
diff --git a/samples/java/play-authenticate-usage/app/controllers/Account.java b/samples/java/play-authenticate-usage/app/controllers/Account.java
index 56aacc43..c27119a5 100644
--- a/samples/java/play-authenticate-usage/app/controllers/Account.java
+++ b/samples/java/play-authenticate-usage/app/controllers/Account.java
@@ -11,7 +11,6 @@
import play.data.format.Formats.NonEmpty;
import play.data.validation.Constraints.MinLength;
import play.data.validation.Constraints.Required;
-import play.i18n.Messages;
import play.i18n.MessagesApi;
import play.mvc.Controller;
import play.mvc.Result;
@@ -67,8 +66,7 @@ public void setRepeatPassword(String repeatPassword) {
public String validate() {
if (password == null || !password.equals(repeatPassword)) {
- return Messages
- .get("playauthenticate.change_password.error.passwords_not_same");
+ return "playauthenticate.change_password.error.passwords_not_same";
}
return null;
}
diff --git a/samples/java/play-authenticate-usage/app/models/AppModel.java b/samples/java/play-authenticate-usage/app/models/AppModel.java
index 9120c695..4dc209c2 100644
--- a/samples/java/play-authenticate-usage/app/models/AppModel.java
+++ b/samples/java/play-authenticate-usage/app/models/AppModel.java
@@ -1,8 +1,8 @@
package models;
-import javax.persistence.MappedSuperclass;
+import io.ebean.Model;
-import com.avaje.ebean.Model;
+import javax.persistence.MappedSuperclass;
@MappedSuperclass
public class AppModel extends Model
diff --git a/samples/java/play-authenticate-usage/app/models/LinkedAccount.java b/samples/java/play-authenticate-usage/app/models/LinkedAccount.java
index a54fd7b2..84273903 100644
--- a/samples/java/play-authenticate-usage/app/models/LinkedAccount.java
+++ b/samples/java/play-authenticate-usage/app/models/LinkedAccount.java
@@ -1,11 +1,12 @@
package models;
+import com.feth.play.module.pa.user.AuthUser;
+import io.ebean.Finder;
+
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
-import com.feth.play.module.pa.user.AuthUser;
-
@Entity
public class LinkedAccount extends AppModel {
@@ -23,10 +24,10 @@ public class LinkedAccount extends AppModel {
public String providerUserId;
public String providerKey;
- public static final Find find = new Find(){};
+ public static final Finder find = new Finder<>(LinkedAccount.class);
public static LinkedAccount findByProviderKey(final User user, String key) {
- return find.where().eq("user", user).eq("providerKey", key)
+ return find.query().where().eq("user", user).eq("providerKey", key)
.findUnique();
}
diff --git a/samples/java/play-authenticate-usage/app/models/SecurityRole.java b/samples/java/play-authenticate-usage/app/models/SecurityRole.java
index 87c08ee9..190000a7 100644
--- a/samples/java/play-authenticate-usage/app/models/SecurityRole.java
+++ b/samples/java/play-authenticate-usage/app/models/SecurityRole.java
@@ -15,12 +15,13 @@
*/
package models;
+import be.objectify.deadbolt.java.models.Role;
+import io.ebean.Finder;
+import io.ebean.Model;
+
import javax.persistence.Entity;
import javax.persistence.Id;
-import com.avaje.ebean.Model;
-import be.objectify.deadbolt.java.models.Role;
-
/**
* @author Steve Chaloner (steve@objectify.be)
*/
@@ -36,7 +37,7 @@ public class SecurityRole extends Model implements Role {
public String roleName;
- public static final Find find = new Find(){};
+ public static final Finder find = new Finder<>(SecurityRole.class);
@Override
public String getName() {
@@ -44,6 +45,6 @@ public String getName() {
}
public static SecurityRole findByRoleName(String roleName) {
- return find.where().eq("roleName", roleName).findUnique();
+ return find.query().where().eq("roleName", roleName).findUnique();
}
}
diff --git a/samples/java/play-authenticate-usage/app/models/TokenAction.java b/samples/java/play-authenticate-usage/app/models/TokenAction.java
index 2a5e99f9..74599d23 100644
--- a/samples/java/play-authenticate-usage/app/models/TokenAction.java
+++ b/samples/java/play-authenticate-usage/app/models/TokenAction.java
@@ -1,18 +1,17 @@
package models;
-import java.util.Date;
+import io.ebean.Ebean;
+import io.ebean.Finder;
+import io.ebean.Model;
+import io.ebean.QueryIterator;
+import io.ebean.annotation.EnumValue;
+import play.data.format.Formats;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
-
-import play.data.format.Formats;
-import com.avaje.ebean.Model;
-
-import com.avaje.ebean.Ebean;
-import com.avaje.ebean.QueryIterator;
-import com.avaje.ebean.annotation.EnumValue;
+import java.util.Date;
@Entity
public class TokenAction extends Model {
@@ -54,14 +53,14 @@ public enum Type {
@Formats.DateTime(pattern = "yyyy-MM-dd HH:mm:ss")
public Date expires;
- public static final Find find = new Find(){};
+ public static final Finder find = new Finder<>(TokenAction.class);
public static TokenAction findByToken(final String token, final Type type) {
- return find.where().eq("token", token).eq("type", type).findUnique();
+ return find.query().where().eq("token", token).eq("type", type).findUnique();
}
public static void deleteByUser(final User u, final Type type) {
- QueryIterator iterator = find.where()
+ QueryIterator iterator = find.query().where()
.eq("targetUser.id", u.id).eq("type", type).findIterate();
while(iterator.hasNext()) {
Ebean.delete(iterator.next());
diff --git a/samples/java/play-authenticate-usage/app/models/User.java b/samples/java/play-authenticate-usage/app/models/User.java
index ddb7a9cf..47c9417a 100644
--- a/samples/java/play-authenticate-usage/app/models/User.java
+++ b/samples/java/play-authenticate-usage/app/models/User.java
@@ -3,14 +3,15 @@
import be.objectify.deadbolt.java.models.Permission;
import be.objectify.deadbolt.java.models.Role;
import be.objectify.deadbolt.java.models.Subject;
-import com.avaje.ebean.Ebean;
-import com.avaje.ebean.ExpressionList;
+import io.ebean.Ebean;
+import io.ebean.ExpressionList;
import com.feth.play.module.pa.providers.password.UsernamePasswordAuthUser;
import com.feth.play.module.pa.user.AuthUser;
import com.feth.play.module.pa.user.AuthUserIdentity;
import com.feth.play.module.pa.user.EmailIdentity;
import com.feth.play.module.pa.user.NameIdentity;
import com.feth.play.module.pa.user.FirstLastNameIdentity;
+import io.ebean.Finder;
import models.TokenAction.Type;
import play.data.format.Formats;
import play.data.validation.Constraints;
@@ -61,7 +62,7 @@ public class User extends AppModel implements Subject {
@ManyToMany
public List permissions;
- public static final AppModel.Find find = new AppModel.Find(){};
+ public static final Finder find = new Finder<>(User.class);
@Override
public String getIdentifier()
@@ -87,12 +88,12 @@ public static boolean existsByAuthUserIdentity(
} else {
exp = getAuthUserFind(identity);
}
- return exp.findRowCount() > 0;
+ return exp.query().findCount() > 0;
}
private static ExpressionList getAuthUserFind(
final AuthUserIdentity identity) {
- return find.where().eq("active", true)
+ return find.query().where().eq("active", true)
.eq("linkedAccounts.providerUserId", identity.getId())
.eq("linkedAccounts.providerKey", identity.getProvider());
}
@@ -208,7 +209,7 @@ public static User findByEmail(final String email) {
}
private static ExpressionList getEmailUserFind(final String email) {
- return find.where().eq("active", true).eq("email", email);
+ return find.query().where().eq("active", true).eq("email", email);
}
public LinkedAccount getAccountByProvider(final String providerKey) {
diff --git a/samples/java/play-authenticate-usage/app/models/UserPermission.java b/samples/java/play-authenticate-usage/app/models/UserPermission.java
index 7a32cf05..f25849c0 100644
--- a/samples/java/play-authenticate-usage/app/models/UserPermission.java
+++ b/samples/java/play-authenticate-usage/app/models/UserPermission.java
@@ -1,10 +1,11 @@
package models;
+import be.objectify.deadbolt.java.models.Permission;
+import io.ebean.Finder;
+
import javax.persistence.Entity;
import javax.persistence.Id;
-import be.objectify.deadbolt.java.models.Permission;
-
/**
* Initial version based on work by Steve Chaloner (steve@objectify.be) for
* Deadbolt2
@@ -21,13 +22,13 @@ public class UserPermission extends AppModel implements Permission {
public String value;
- public static final AppModel.Find find = new AppModel.Find(){};
+ public static final Finder find = new Finder<>(UserPermission.class);
public String getValue() {
return value;
}
public static UserPermission findByValue(String value) {
- return find.where().eq("value", value).findUnique();
+ return find.query().where().eq("value", value).findUnique();
}
}
diff --git a/samples/java/play-authenticate-usage/app/providers/MyUsernamePasswordAuthProvider.java b/samples/java/play-authenticate-usage/app/providers/MyUsernamePasswordAuthProvider.java
index cd27e0eb..2fd5af78 100644
--- a/samples/java/play-authenticate-usage/app/providers/MyUsernamePasswordAuthProvider.java
+++ b/samples/java/play-authenticate-usage/app/providers/MyUsernamePasswordAuthProvider.java
@@ -5,12 +5,12 @@
import com.feth.play.module.pa.PlayAuthenticate;
import com.feth.play.module.pa.providers.password.UsernamePasswordAuthProvider;
import com.feth.play.module.pa.providers.password.UsernamePasswordAuthUser;
-
import controllers.routes;
import models.LinkedAccount;
import models.TokenAction;
import models.TokenAction.Type;
import models.User;
+import play.Application;
import play.Logger;
import play.data.Form;
import play.data.FormFactory;
@@ -18,12 +18,12 @@
import play.data.validation.Constraints.MinLength;
import play.data.validation.Constraints.Required;
import play.i18n.Lang;
-import play.i18n.Messages;
import play.inject.ApplicationLifecycle;
import play.mvc.Call;
import play.mvc.Http.Context;
import javax.inject.Inject;
+import javax.inject.Provider;
import javax.inject.Singleton;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -107,8 +107,7 @@ public static class MySignup extends MyLogin {
public String validate() {
if (password == null || !password.equals(repeatPassword)) {
- return Messages
- .get("playauthenticate.password.signup.error.passwords_not_same");
+ return "playauthenticate.password.signup.error.passwords_not_same";
}
return null;
}
@@ -130,13 +129,15 @@ public void setRepeatPassword(String repeatPassword) {
}
}
+ private final Provider appProvider;
private final Form SIGNUP_FORM;
private final Form LOGIN_FORM;
@Inject
- public MyUsernamePasswordAuthProvider(final PlayAuthenticate auth, final FormFactory formFactory,
+ public MyUsernamePasswordAuthProvider(final Provider appProvider, final PlayAuthenticate auth, final FormFactory formFactory,
final ApplicationLifecycle lifecycle, MailerFactory mailerFactory) {
super(auth, lifecycle, mailerFactory);
+ this.appProvider = appProvider;
this.SIGNUP_FORM = formFactory.form(MySignup.class);
this.LOGIN_FORM = formFactory.form(MyLogin.class);
@@ -154,7 +155,7 @@ public Form getLoginForm() {
protected MySignup getSignup(final Context ctx) {
// TODO change to getSignupForm().bindFromRequest(request) after 2.1
Context.current.set(ctx);
- final Form filledForm = SIGNUP_FORM.bindFromRequest();
+ final Form filledForm = getSignupForm().bindFromRequest();
return filledForm.get();
}
@@ -162,7 +163,7 @@ protected MySignup getSignup(final Context ctx) {
protected MyLogin getLogin(final Context ctx) {
// TODO change to getLoginForm().bindFromRequest(request) after 2.1
Context.current.set(ctx);
- final Form filledForm = LOGIN_FORM.bindFromRequest();
+ final Form filledForm = getLoginForm().bindFromRequest();
return filledForm.get();
}
@@ -251,14 +252,14 @@ protected MyLoginUsernamePasswordAuthUser transformAuthUser(final MyUsernamePass
@Override
protected String getVerifyEmailMailingSubject(
final MyUsernamePasswordAuthUser user, final Context ctx) {
- return Messages.get("playauthenticate.password.verify_signup.subject");
+ return "playauthenticate.password.verify_signup.subject";
}
@Override
protected String onLoginUserNotFound(final Context context) {
context.flash()
.put(controllers.Application.FLASH_ERROR_KEY,
- Messages.get("playauthenticate.password.login.unknown_user_or_pw"));
+ "playauthenticate.password.login.unknown_user_or_pw");
return super.onLoginUserNotFound(context);
}
@@ -271,7 +272,7 @@ protected Body getVerifyEmailMailingBody(final String token,
final String url = routes.Signup.verify(token).absoluteURL(
ctx.request(), isSecure);
- final Lang lang = Lang.preferred(ctx.request().acceptLanguages());
+ final Lang lang = Lang.preferred(appProvider.get(), ctx.request().acceptLanguages());
final String langCode = lang.code();
final String html = getEmailTemplate(
@@ -309,7 +310,7 @@ protected String generatePasswordResetRecord(final User u) {
protected String getPasswordResetMailingSubject(final User user,
final Context ctx) {
- return Messages.get("playauthenticate.password.reset_email.subject");
+ return "playauthenticate.password.reset_email.subject";
}
protected Body getPasswordResetMailingBody(final String token,
@@ -320,7 +321,7 @@ protected Body getPasswordResetMailingBody(final String token,
final String url = routes.Signup.resetPassword(token).absoluteURL(
ctx.request(), isSecure);
- final Lang lang = Lang.preferred(ctx.request().acceptLanguages());
+ final Lang lang = Lang.preferred(appProvider.get(), ctx.request().acceptLanguages());
final String langCode = lang.code();
final String html = getEmailTemplate(
@@ -347,7 +348,7 @@ public boolean isLoginAfterPasswordReset() {
protected String getVerifyEmailMailingSubjectAfterSignup(final User user,
final Context ctx) {
- return Messages.get("playauthenticate.password.verify_email.subject");
+ return "playauthenticate.password.verify_email.subject";
}
protected String getEmailTemplate(final String template,
@@ -401,7 +402,7 @@ protected Body getVerifyEmailMailingBodyAfterSignup(final String token,
final String url = routes.Signup.verify(token).absoluteURL(
ctx.request(), isSecure);
- final Lang lang = Lang.preferred(ctx.request().acceptLanguages());
+ final Lang lang = Lang.preferred(appProvider.get(), ctx.request().acceptLanguages());
final String langCode = lang.code();
final String html = getEmailTemplate(
diff --git a/samples/java/play-authenticate-usage/app/security/MyDeadboltHandler.java b/samples/java/play-authenticate-usage/app/security/MyDeadboltHandler.java
index f43a1ad2..596d7311 100644
--- a/samples/java/play-authenticate-usage/app/security/MyDeadboltHandler.java
+++ b/samples/java/play-authenticate-usage/app/security/MyDeadboltHandler.java
@@ -24,7 +24,7 @@ public MyDeadboltHandler(final PlayAuthenticate auth, final ExecutionContextProv
}
@Override
- public CompletionStage> beforeAuthCheck(final Http.Context context) {
+ public CompletionStage> beforeAuthCheck(final Http.Context context, final Optional content) {
if (this.auth.isLoggedIn(context.session())) {
// user is logged in
return CompletableFuture.completedFuture(Optional.empty());
diff --git a/samples/java/play-authenticate-usage/app/service/DataInitializer.java b/samples/java/play-authenticate-usage/app/service/DataInitializer.java
index b27949bc..fc3638b3 100644
--- a/samples/java/play-authenticate-usage/app/service/DataInitializer.java
+++ b/samples/java/play-authenticate-usage/app/service/DataInitializer.java
@@ -9,7 +9,7 @@
*/
public class DataInitializer {
public DataInitializer() {
- if (SecurityRole.find.findCount() == 0) {
+ if (SecurityRole.find.query().findCount() == 0) {
for (final String roleName : Arrays
.asList(controllers.Application.USER_ROLE)) {
final SecurityRole role = new SecurityRole();
diff --git a/samples/java/play-authenticate-usage/build.sbt b/samples/java/play-authenticate-usage/build.sbt
index f1b9535c..7b4c5356 100644
--- a/samples/java/play-authenticate-usage/build.sbt
+++ b/samples/java/play-authenticate-usage/build.sbt
@@ -2,18 +2,21 @@ organization := "com.feth"
name := "play-authenticate-usage"
-scalaVersion := "2.11.8"
+scalaVersion := "2.12.2"
version := "1.0-SNAPSHOT"
herokuAppName in Compile := "play-authenticate"
val appDependencies = Seq(
- "be.objectify" %% "deadbolt-java" % "2.5.0",
+ "be.objectify" %% "deadbolt-java" % "2.6.4",
+ "be.objectify" %% "deadbolt-java-gs" % "2.6.0",
// Comment the next line for local development of the Play Authentication core:
- "com.feth" %% "play-authenticate" % "0.8.3",
+ // Use the latest release version when copying this code, e.g. "0.9.0"
+ "com.feth" %% "play-authenticate" % "0.9.0-SNAPSHOT",
"org.postgresql" % "postgresql" % "9.4-1206-jdbc42",
- cache,
+ cacheApi,
+ ehcache,
evolutions,
javaWs,
javaJdbc,
diff --git a/samples/java/play-authenticate-usage/conf/application.conf b/samples/java/play-authenticate-usage/conf/application.conf
index a375e99a..dd7d000f 100644
--- a/samples/java/play-authenticate-usage/conf/application.conf
+++ b/samples/java/play-authenticate-usage/conf/application.conf
@@ -15,7 +15,8 @@ play {
# ~~~~~
# The secret key is used to secure cryptographics functions.
# If you deploy your application to several instances be sure to use the same key!
-play.crypto.secret="y]Z5;`T0=F3mAda1lW[r5jFWCw9stMiBnShjPU;59l7cwA9LX1abrprOgTP/VCDQ"
+play.http.secret.key="changeme"
+play.http.secret.key=${?APPLICATION_SECRET}
# The application languages
# ~~~~~
diff --git a/samples/java/play-authenticate-usage/conf/play-authenticate/mine.conf b/samples/java/play-authenticate-usage/conf/play-authenticate/mine.conf
index 89d66e2c..3d23d4a6 100644
--- a/samples/java/play-authenticate-usage/conf/play-authenticate/mine.conf
+++ b/samples/java/play-authenticate-usage/conf/play-authenticate/mine.conf
@@ -10,6 +10,8 @@ play-authenticate {
# if you are not using it, you can remove this portion of the config file
password {
mail {
+ includeXMailerHeader=true
+
verificationLink {
# Whether the verification link will be HTTPS
secure=false
diff --git a/samples/java/play-authenticate-usage/project/plugins.sbt b/samples/java/play-authenticate-usage/project/plugins.sbt
index feeede0c..fce5978d 100644
--- a/samples/java/play-authenticate-usage/project/plugins.sbt
+++ b/samples/java/play-authenticate-usage/project/plugins.sbt
@@ -5,18 +5,18 @@ logLevel := Level.Warn
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
// Use the Play sbt plugin for Play projects
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % Option(System.getProperty("play.version")).getOrElse("2.5.14"))
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % Option(System.getProperty("play.version")).getOrElse("2.6.12"))
-addSbtPlugin("com.typesafe.sbt" %% "sbt-play-ebean" % "3.1.0")
+addSbtPlugin("com.typesafe.sbt" %% "sbt-play-ebean" % "4.0.2")
// TODO: find a way to automatically load sbt plugins of projects we depend on
// if you see this and know how to do it, please open a pull request :)
// Uncomment the next line for local development of the Play Authentication core:
-//addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.0")
+//addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.0")
// Uncomment the next line for local development of the Play Authentication core:
-//addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.0")
+//addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.7")
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")
diff --git a/test-app/app/controllers/ApplicationController.java b/test-app/app/controllers/ApplicationController.java
index 6fc045f4..a7240e13 100644
--- a/test-app/app/controllers/ApplicationController.java
+++ b/test-app/app/controllers/ApplicationController.java
@@ -1,12 +1,11 @@
package controllers;
-import static play.data.Form.form;
-
import com.feth.play.module.pa.PlayAuthenticate;
import play.Logger;
import play.Play;
import play.data.Form;
+import play.data.FormFactory;
import play.mvc.Controller;
import play.mvc.Result;
import providers.TestUsernamePasswordAuthProvider;
@@ -19,6 +18,8 @@
@Singleton
public class ApplicationController extends Controller {
+ @Inject FormFactory formFactory;
+
public final String FLASH_ERROR_KEY = "error";
private TestUsernamePasswordAuthProvider testProvider;
@@ -33,12 +34,12 @@ public Result index() {
}
public Result login() {
- return ok(views.html.login.render(form(Login.class).bindFromRequest()));
+ return ok(views.html.login.render(formFactory.form(Login.class).bindFromRequest()));
}
public Result doLogin() {
com.feth.play.module.pa.controllers.Authenticate.noCache(response());
- final Form filledForm = form(Login.class).bindFromRequest();
+ final Form filledForm = formFactory.form(Login.class).bindFromRequest();
if (filledForm.hasErrors()) {
// User did not fill everything properly
return badRequest(views.html.login.render(filledForm));
@@ -50,12 +51,12 @@ public Result doLogin() {
public Result signup() {
return ok(views.html.signup
- .render(form(Signup.class).bindFromRequest()));
+ .render(formFactory.form(Signup.class).bindFromRequest()));
}
public Result doSignup() {
com.feth.play.module.pa.controllers.Authenticate.noCache(response());
- final Form filledForm = form(Signup.class).bindFromRequest();
+ final Form filledForm = formFactory.form(Signup.class).bindFromRequest();
if (filledForm.hasErrors()) {
// User did not fill everything properly
return badRequest(views.html.signup.render(filledForm));
diff --git a/test-app/app/providers/TestUsernamePasswordAuthProvider.java b/test-app/app/providers/TestUsernamePasswordAuthProvider.java
index 8f5c4bd5..595c864a 100644
--- a/test-app/app/providers/TestUsernamePasswordAuthProvider.java
+++ b/test-app/app/providers/TestUsernamePasswordAuthProvider.java
@@ -7,6 +7,7 @@
import com.feth.play.module.pa.providers.password.UsernamePasswordAuthUser;
import play.Logger;
import play.data.Form;
+import play.data.FormFactory;
import play.data.validation.Constraints.Email;
import play.data.validation.Constraints.MinLength;
import play.data.validation.Constraints.Required;
@@ -21,8 +22,6 @@
import java.util.Map.Entry;
import java.util.UUID;
-import static play.data.Form.form;
-
@Singleton
public class TestUsernamePasswordAuthProvider
extends
@@ -31,10 +30,12 @@ public class TestUsernamePasswordAuthProvider
private final Map verifiedUsers = new HashMap<>();
private final Map unverifiedUsers = new HashMap<>();
private final Map verificationTokens = new HashMap<>();
+ private final FormFactory formFactory;
@Inject
- public TestUsernamePasswordAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final MailerFactory mailerFactory) {
+ public TestUsernamePasswordAuthProvider(final PlayAuthenticate auth, final ApplicationLifecycle lifecycle, final MailerFactory mailerFactory, final FormFactory formFactory) {
super(auth, lifecycle, mailerFactory);
+ this.formFactory = formFactory;
}
public static class Login implements
@@ -180,16 +181,15 @@ protected com.feth.play.module.pa.providers.password.UsernamePasswordAuthProvide
}
protected Form getSignupForm() {
- return form(Signup.class);
+ return formFactory.form(Signup.class);
}
protected Form getLoginForm() {
- return form(Login.class);
+ return formFactory.form(Login.class);
}
@Override
protected Signup getSignup(final Context ctx) {
- // TODO change to getSignupForm().bindFromRequest(request) after 2.1
Context.current.set(ctx);
final Form filledForm = getSignupForm().bindFromRequest();
return filledForm.get();
diff --git a/test-app/build.sbt b/test-app/build.sbt
index f44c2542..a978cdec 100644
--- a/test-app/build.sbt
+++ b/test-app/build.sbt
@@ -2,25 +2,33 @@ organization := "com.feth"
name := "play-authenticate-tests"
-scalaVersion := "2.11.8"
+scalaVersion := "2.12.2"
version := "1.0-SNAPSHOT"
val appDependencies = Seq(
+ javaForms,
specs2 % "test",
- "org.easytesting" % "fest-assert" % "1.4" % "test"
+ "org.easytesting" % "fest-assert" % "1.4" % "test",
+ cacheApi,
+ ehcache
)
// Needed for specs2
resolvers += "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases"
-// add resolver for easymail snapshots
+// add resolver for deadbolt and easymail snapshots
resolvers += Resolver.sonatypeRepo("snapshots")
+// display deprecated or poorly formed Java
+javacOptions ++= Seq("-Xlint:unchecked")
+javacOptions ++= Seq("-Xlint:deprecation")
+javacOptions ++= Seq("-Xdiags:verbose")
+
lazy val playAuthenticate = (project in file("modules/play-authenticate")).enablePlugins(PlayJava)
lazy val root = (project in file("."))
- .enablePlugins(PlayJava)
+ .enablePlugins(PlayJava, PlayEbean)
.settings(
libraryDependencies ++= appDependencies
)
diff --git a/test-app/project/plugins.sbt b/test-app/project/plugins.sbt
index 78d459da..1daa3b49 100644
--- a/test-app/project/plugins.sbt
+++ b/test-app/project/plugins.sbt
@@ -7,8 +7,10 @@ resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/release
// Use the Play sbt plugin for Play projects
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % Option(System.getProperty("play.version")).getOrElse("2.5.14"))
+addSbtPlugin("com.typesafe.sbt" %% "sbt-play-ebean" % "4.0.2")
+
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.0")
-addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.0")
+addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.7")
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")
diff --git a/test-app/test/ScalaControllerSpec.scala b/test-app/test/ScalaControllerSpec.scala
deleted file mode 100644
index 9af37bd7..00000000
--- a/test-app/test/ScalaControllerSpec.scala
+++ /dev/null
@@ -1,87 +0,0 @@
-package test
-
-import controllers.ScalaController
-import play.api.mvc.{AnyContentAsEmpty, Call, Session}
-import play.api.test._
-import play.api.{Application, Logger}
-import providers.TestUsernamePasswordAuthProvider
-
-/**
- * Add your spec here.
- * You can mock out a whole application including requests, plugins etc.
- * For more information, consult the wiki.
- */
-object ScalaControllerSpec extends PlaySpecification {
-
- "ScalaController" should {
-
- "send 303 for index page without login" in new WithApplication {
-
- val controller = app.injector.instanceOf(classOf[ScalaController])
- val result = controller.index()(FakeRequest()).run
- status(result) must equalTo(SEE_OTHER)
- redirectLocation(result) must beSome like {
- case Some(s: String) =>
- s must_== controllers.routes.ApplicationController.login.url
- }
- }
-
- "send 200 for index page with login" in new WithApplication {
- val someSession = signupAndLogin
- val controller = app.injector.instanceOf(classOf[ScalaController])
- val result = controller.index()(
- FakeRequest().withSession(someSession.get.data.toSeq: _*)).run
- status(result) must equalTo(OK)
- }
- }
-
- def signupAndLogin(implicit app: Application): Option[Session] = {
- val email = "user@example.com"
- val password = "PaSSW0rd"
- def fakeRequestCall(call: Call): FakeRequest[AnyContentAsEmpty.type] = {
- FakeRequest(call.method, call.url)
- }
- def signup(email: String, password: String) = {
- val someResult = route(fakeRequestCall(
- controllers.routes.ApplicationController.doSignup())
- .withFormUrlEncodedBody("email" -> email, "password" -> password))
- someResult foreach { status(_) must_== SEE_OTHER }
- upAuthProvider.getVerificationToken(email)
- }
- def validate(token: String) {
- // Validate the token
- token must not beNull;
- Logger.debug(s"Verifying token: $token")
- val someResult = route(fakeRequestCall(
- controllers.routes.ApplicationController.verify(token)))
- someResult foreach { result =>
- status(result) must_== SEE_OTHER
- upAuthProvider.getVerificationToken(email) must beNull
- // We should actually be logged in here, but let's ignore that
- // as we want to test login too.
- redirectLocation(result) must beSome("/")
- }
- }
- def login(username: String, password: String) = {
- // Log the user in
- val someResult = route(fakeRequestCall(
- controllers.routes.ApplicationController.doLogin())
- .withFormUrlEncodedBody("email" -> email, "password" -> password))
- someResult map { result =>
- status(result) must_== SEE_OTHER
- redirectLocation(result) must beSome like {
- case Some(s: String) =>
- s must_== "/"
- }
- session(result)
- }
- }
- val token = signup(email, password)
- validate(token)
- login(email, password)
- }
-
- def upAuthProvider(implicit app: Application): TestUsernamePasswordAuthProvider = {
- app.injector.instanceOf(classOf[TestUsernamePasswordAuthProvider])
- }
-}