Skip to content

Commit 997448c

Browse files
committed
Migrate to Play 2.6
1 parent f4ac83c commit 997448c

File tree

90 files changed

+774
-869
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+774
-869
lines changed

securesocial.sbt build.sbt

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ name := "SecureSocial-parent"
33
version := Common.version
44

55
scalaVersion := Common.scalaVersion
6+
crossScalaVersions := Common.crossScalaVersions
67

78
lazy val core = project.in( file("module-code") ).enablePlugins(PlayScala)
89

Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
package securesocial.controllers
22

3-
class Assets extends controllers.AssetsBuilder(play.api.http.LazyHttpErrorHandler)
3+
import javax.inject.Inject
4+
5+
import play.api.http.HttpErrorHandler
6+
7+
class Assets @Inject() (errorHandler: HttpErrorHandler, metadata: controllers.AssetsMetadata)
8+
extends controllers.AssetsBuilder(errorHandler, metadata)

module-code/app/securesocial/controllers/LoginApi.scala

+8-8
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,25 @@ package securesocial.controllers
1919
import javax.inject.Inject
2020

2121
import org.joda.time.DateTime
22-
import securesocial.core._
23-
import play.api.mvc.Action
24-
import scala.concurrent.{ ExecutionContext, Future }
25-
import securesocial.core.SignUpEvent
22+
import play.api.mvc.ControllerComponents
2623
import securesocial.core.AuthenticationResult.Authenticated
27-
import securesocial.core.LoginEvent
28-
import securesocial.core.BasicProfile
2924
import securesocial.core.services.SaveMode
25+
import securesocial.core.{ LoginEvent, SignUpEvent, _ }
26+
27+
import scala.concurrent.Future
3028

3129
/**
3230
* A default controller that uses the BasicProfile as the application user type.
3331
*/
34-
class LoginApi @Inject() (override implicit val env: RuntimeEnvironment) extends BaseLoginApi
32+
class LoginApi @Inject() (
33+
override implicit val env: RuntimeEnvironment,
34+
override val controllerComponents: ControllerComponents) extends BaseLoginApi
3535

3636
/**
3737
* This trait provides the means to provide an authentication API that can be used by client side or mobile apps.
3838
*
3939
*/
40-
trait BaseLoginApi extends SecureSocial {
40+
trait BaseLoginApi extends SecureSocialController {
4141

4242
import play.api.libs.json._
4343

module-code/app/securesocial/controllers/LoginPage.scala

+9-5
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,24 @@ package securesocial.controllers
1818

1919
import javax.inject.Inject
2020

21+
import play.api.mvc.ControllerComponents
2122
import securesocial.core._
2223
import securesocial.core.utils._
2324
import play.api.{ Configuration, Play }
2425
import providers.UsernamePasswordProvider
2526

26-
import scala.concurrent.{ ExecutionContext, Future }
27+
import scala.concurrent.Future
2728
import play.filters.csrf.CSRFAddToken
2829

2930
/**
3031
* A default Login controller that uses BasicProfile as the user type.
3132
*
3233
* @param env An environment
3334
*/
34-
class LoginPage @Inject() (override implicit val env: RuntimeEnvironment, val csrfAddToken: CSRFAddToken) extends BaseLoginPage
35+
class LoginPage @Inject() (
36+
override implicit val env: RuntimeEnvironment,
37+
val csrfAddToken: CSRFAddToken,
38+
val controllerComponents: ControllerComponents) extends BaseLoginPage
3539

3640
/**
3741
* The trait that defines the login page controller
@@ -57,15 +61,15 @@ trait BaseLoginPage extends SecureSocial {
5761
// if the user is already logged in, a referer is set and we handle the
5862
// referer the same way as an OriginalUrl in the session, we redirect back
5963
// to this URL. Otherwise, just redirect to the application's landing page
60-
val to = (if (SecureSocial.enableRefererAsOriginalUrl) {
64+
val to = (if (env.enableRefererAsOriginalUrl.value) {
6165
SecureSocial.refererPathAndQuery
6266
} else {
6367
None
6468
}).getOrElse(ProviderControllerHelper.landingUrl(configuration))
6569
logger.debug("User already logged in, skipping login page. Redirecting to %s".format(to))
6670
Redirect(to)
6771
} else {
68-
if (SecureSocial.enableRefererAsOriginalUrl) {
72+
if (env.enableRefererAsOriginalUrl.value) {
6973
SecureSocial.withRefererAsOriginalUrl(Ok(env.viewTemplates.getLoginPage(UsernamePasswordProvider.loginForm)))
7074
} else {
7175
Ok(env.viewTemplates.getLoginPage(UsernamePasswordProvider.loginForm))
@@ -82,7 +86,7 @@ trait BaseLoginPage extends SecureSocial {
8286
*/
8387
def logout = UserAwareAction.async {
8488
implicit request =>
85-
val redirectTo = Redirect(configuration.getString(onLogoutGoTo).getOrElse(env.routes.loginPageUrl))
89+
val redirectTo = Redirect(configuration.get[Option[String]](onLogoutGoTo).getOrElse(env.routes.loginPageUrl))
8690
val result = for {
8791
user <- request.user
8892
authenticator <- request.authenticator

module-code/app/securesocial/controllers/MailTokenBasedOperations.scala

+5-9
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import play.api.Configuration
2323
import play.api.data.Form
2424
import play.api.data.Forms._
2525
import play.api.data.validation.Constraints._
26-
import play.api.i18n.{ I18nSupport, Messages, MessagesApi }
26+
import play.api.i18n.Messages
2727
import play.api.mvc.{ RequestHeader, Result }
2828
import securesocial.core.SecureSocial
2929
import securesocial.core.providers.MailToken
@@ -34,19 +34,16 @@ import scala.concurrent.Future
3434
* The base controller for password reset and password change operations
3535
*
3636
*/
37-
abstract class MailTokenBasedOperations extends SecureSocial with I18nSupport {
37+
abstract class MailTokenBasedOperations extends SecureSocial {
3838
val Success = "success"
3939
val Error = "error"
4040
val Email = "email"
4141
val TokenDurationKey = "securesocial.userpass.tokenDuration"
42-
val DefaultDuration = 60
4342
val configuration: Configuration = env.configuration
44-
val TokenDuration = configuration.getInt(TokenDurationKey).getOrElse(DefaultDuration)
45-
implicit val messagesApi: MessagesApi = env.messagesApi
43+
val TokenDuration = configuration.get[Int](TokenDurationKey)
4644

4745
val startForm = Form(
48-
Email -> email.verifying(nonEmpty)
49-
)
46+
Email -> email.verifying(nonEmpty))
5047

5148
/**
5249
* Creates a token for mail based operations
@@ -59,8 +56,7 @@ abstract class MailTokenBasedOperations extends SecureSocial with I18nSupport {
5956
val now = DateTime.now
6057

6158
Future.successful(MailToken(
62-
UUID.randomUUID().toString, email.toLowerCase, now, now.plusMinutes(TokenDuration), isSignUp = isSignUp
63-
))
59+
UUID.randomUUID().toString, email.toLowerCase, now, now.plusMinutes(TokenDuration), isSignUp = isSignUp))
6460
}
6561

6662
/**

module-code/app/securesocial/controllers/PasswordChange.scala

+13-21
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@ package securesocial.controllers
1818

1919
import javax.inject.Inject
2020

21-
import securesocial.core._
22-
import securesocial.core.SecureSocial._
23-
import play.api.mvc.Result
24-
import play.api.{ Configuration, Play }
21+
import play.api.Configuration
2522
import play.api.data.Form
2623
import play.api.data.Forms._
24+
import play.api.i18n.{ I18nSupport, Messages }
25+
import play.api.mvc.{ ControllerComponents, Result }
26+
import play.filters.csrf._
27+
import securesocial.core.SecureSocial._
28+
import securesocial.core._
2729
import securesocial.core.providers.utils.PasswordValidator
28-
import play.api.i18n.{ I18nSupport, Messages, MessagesApi }
2930

3031
import scala.concurrent.{ Await, Future }
31-
import play.filters.csrf._
3232

3333
/**
3434
* A default PasswordChange controller that uses the BasicProfile as the user type
@@ -38,8 +38,8 @@ import play.filters.csrf._
3838
class PasswordChange @Inject() (
3939
override implicit val env: RuntimeEnvironment,
4040
val csrfAddToken: CSRFAddToken,
41-
val csrfCheck: CSRFCheck
42-
) extends BasePasswordChange
41+
val csrfCheck: CSRFCheck,
42+
val controllerComponents: ControllerComponents) extends BasePasswordChange
4343

4444
/**
4545
* A trait that defines the password change functionality
@@ -58,17 +58,15 @@ trait BasePasswordChange extends SecureSocial with I18nSupport {
5858
val csrfAddToken: CSRFAddToken
5959
val csrfCheck: CSRFCheck
6060
val configuration: Configuration = env.configuration
61-
implicit val messagesApi: MessagesApi = env.messagesApi
6261

6362
/**
6463
* The property that specifies the page the user is redirected to after changing the password.
6564
*/
6665
val onPasswordChangeGoTo = "securesocial.onPasswordChangeGoTo"
6766

6867
/** The redirect target of the handlePasswordChange action. */
69-
def onHandlePasswordChangeGoTo = configuration.getString(onPasswordChangeGoTo).getOrElse(
70-
securesocial.controllers.routes.PasswordChange.page().url
71-
)
68+
def onHandlePasswordChangeGoTo = configuration.get[Option[String]](onPasswordChangeGoTo).getOrElse(
69+
securesocial.controllers.routes.PasswordChange.page().url)
7270

7371
/**
7472
* checks if the supplied password matches the stored one
@@ -98,11 +96,7 @@ trait BasePasswordChange extends SecureSocial with I18nSupport {
9896
NewPassword ->
9997
tuple(
10098
Password1 -> nonEmptyText.verifying(PasswordValidator.constraint),
101-
Password2 -> nonEmptyText
102-
).verifying(Messages(BaseRegistration.PasswordsDoNotMatch), passwords => passwords._1 == passwords._2)
103-
104-
)((currentPassword, newPassword) => ChangeInfo(currentPassword, newPassword._1))((changeInfo: ChangeInfo) => Some(("", ("", ""))))
105-
)
99+
Password2 -> nonEmptyText).verifying(Messages(BaseRegistration.PasswordsDoNotMatch), passwords => passwords._1 == passwords._2))((currentPassword, newPassword) => ChangeInfo(currentPassword, newPassword._1))((changeInfo: ChangeInfo) => Some(("", ("", "")))))
106100

107101
env.userService.passwordInfoFor(request.user).flatMap {
108102
case Some(info) =>
@@ -139,17 +133,15 @@ trait BasePasswordChange extends SecureSocial with I18nSupport {
139133
errors => Future.successful(BadRequest(env.viewTemplates.getPasswordChangePage(errors))),
140134
info => {
141135
val newPasswordInfo = env.currentHasher.hash(info.newPassword)
142-
val userLang = request2lang(request)
143136
env.userService.updatePasswordInfo(request.user, newPasswordInfo).map {
144137
case Some(u) =>
145-
env.mailer.sendPasswordChangedNotice(u)(request, userLang)
138+
env.mailer.sendPasswordChangedNotice(u)(request, messagesApi.preferred(request))
146139
val result = Redirect(onHandlePasswordChangeGoTo).flashing(Success -> Messages(OkMessage))
147140
Events.fire(PasswordChangeEvent(request.user)).map(result.withSession).getOrElse(result)
148141
case None =>
149142
Redirect(onHandlePasswordChangeGoTo).flashing(Error -> Messages("securesocial.password.error"))
150143
}
151-
}
152-
)
144+
})
153145
}
154146
}
155147
}

module-code/app/securesocial/controllers/PasswordReset.scala

+11-16
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@ package securesocial.controllers
1818

1919
import javax.inject.Inject
2020

21-
import play.api.Configuration
2221
import play.api.data.Form
2322
import play.api.data.Forms._
2423
import play.api.i18n.{ Messages, MessagesApi }
24+
import play.api.mvc._
2525
import play.filters.csrf._
26-
import play.api.mvc.Action
2726
import securesocial.core._
2827
import securesocial.core.providers.UsernamePasswordProvider
2928
import securesocial.core.providers.utils.PasswordValidator
@@ -39,29 +38,28 @@ import scala.concurrent.Future
3938
class PasswordReset @Inject() (
4039
override implicit val env: RuntimeEnvironment,
4140
val csrfAddToken: CSRFAddToken,
42-
val csrfCheck: CSRFCheck
43-
) extends BasePasswordReset
41+
val csrfCheck: CSRFCheck,
42+
val controllerComponents: ControllerComponents) extends BasePasswordReset
4443

4544
/**
4645
* The trait that provides the Password Reset functionality
4746
*
4847
*/
49-
trait BasePasswordReset extends MailTokenBasedOperations {
48+
trait BasePasswordReset extends MailTokenBasedOperations with BaseController {
5049
private val logger = play.api.Logger("securesocial.controllers.BasePasswordReset")
5150

5251
val PasswordUpdated = "securesocial.password.passwordUpdated"
5352
val ErrorUpdatingPassword = "securesocial.password.error"
5453

55-
val changePasswordForm = Form(
54+
def changePasswordForm(implicit request: RequestHeader) = Form(
5655
BaseRegistration.Password ->
5756
tuple(
5857
BaseRegistration.Password1 -> nonEmptyText.verifying(PasswordValidator.constraint),
59-
BaseRegistration.Password2 -> nonEmptyText
60-
).verifying(Messages(BaseRegistration.PasswordsDoNotMatch), passwords => passwords._1 == passwords._2)
61-
)
58+
BaseRegistration.Password2 -> nonEmptyText).verifying(Messages(BaseRegistration.PasswordsDoNotMatch), passwords => passwords._1 == passwords._2))
6259

63-
val csrfAddToken: CSRFAddToken
64-
val csrfCheck: CSRFCheck
60+
def csrfAddToken: CSRFAddToken
61+
def csrfCheck: CSRFCheck
62+
override def messagesApi: MessagesApi = super.messagesApi
6563

6664
/**
6765
* Renders the page that starts the password reset flow
@@ -96,8 +94,7 @@ trait BasePasswordReset extends MailTokenBasedOperations {
9694
}
9795
handleStartResult().flashing(Success -> Messages(BaseRegistration.ThankYouCheckEmail))
9896
}
99-
}
100-
)
97+
})
10198
}
10299
}
103100

@@ -123,7 +120,6 @@ trait BasePasswordReset extends MailTokenBasedOperations {
123120
*/
124121
def handleResetPassword(token: String) = csrfCheck {
125122
Action.async { implicit request =>
126-
import scala.concurrent.ExecutionContext.Implicits.global
127123
executeForToken(token, false, {
128124
t =>
129125
changePasswordForm.bindFromRequest.fold(
@@ -144,8 +140,7 @@ trait BasePasswordReset extends MailTokenBasedOperations {
144140
case _ =>
145141
logger.error("[securesocial] could not find user with email %s during password reset".format(t.email))
146142
Future.successful(confirmationResult().flashing(Error -> Messages(ErrorUpdatingPassword)))
147-
}
148-
)
143+
})
149144
})
150145
}
151146
}

module-code/app/securesocial/controllers/ProviderController.scala

+4-6
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package securesocial.controllers
1919
import javax.inject.Inject
2020

2121
import play.api.Configuration
22-
import play.api.i18n.{ I18nSupport, Messages, MessagesApi }
22+
import play.api.i18n.{ I18nSupport, Messages }
2323
import play.api.mvc._
2424
import securesocial.core._
2525
import securesocial.core.authenticator.CookieAuthenticator
@@ -43,7 +43,6 @@ trait BaseProviderController extends SecureSocial with I18nSupport {
4343
val logger = play.api.Logger(this.getClass.getName)
4444

4545
val configuration: Configuration = env.configuration
46-
implicit val messagesApi: MessagesApi = env.messagesApi
4746

4847
/**
4948
* The authentication entry point for GET requests
@@ -168,16 +167,15 @@ object ProviderControllerHelper {
168167
/**
169168
* The application context
170169
*/
171-
val ApplicationContext = "application.context"
170+
val ApplicationContext = "play.http.context"
172171

173172
/**
174173
* The url where the user needs to be redirected after succesful authentication.
175174
*
176175
* @return
177176
*/
178-
def landingUrl(configuration: Configuration) = configuration.getString(onLoginGoTo).getOrElse(
179-
configuration.getString(ApplicationContext).getOrElse(Root)
180-
)
177+
def landingUrl(configuration: Configuration) = configuration.get[Option[String]](onLoginGoTo).getOrElse(
178+
configuration.get[String](ApplicationContext))
181179

182180
/**
183181
* Returns the url that the user should be redirected to after login

0 commit comments

Comments
 (0)