Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Regroupe le code de configuration dans une seule classe #1423

Merged
merged 6 commits into from
Jun 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 7 additions & 29 deletions app/controllers/ApplicationController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import models.EventType._
import models._
import models.formModels.{AnswerFormData, ApplicationFormData, InvitationFormData}
import models.mandat.Mandat
import modules.AppConfig
import org.webjars.play.WebJarsUtil
import play.api.cache.AsyncCacheApi
import play.api.data.Forms._
Expand Down Expand Up @@ -46,7 +47,7 @@ import scala.util.{Failure, Success, Try}
case class ApplicationController @Inject() (
applicationService: ApplicationService,
cache: AsyncCacheApi,
configuration: play.api.Configuration,
config: AppConfig,
eventService: EventService,
fileService: FileService,
loginAction: LoginAction,
Expand All @@ -63,25 +64,6 @@ case class ApplicationController @Inject() (
with Operators.ApplicationOperators
with Operators.UserOperators {

private val filesPath = configuration.underlying.getString("app.filesPath")
private val featureMandatSms: Boolean = configuration.get[Boolean]("app.features.smsMandat")

private val featureCanSendApplicationsAnywhere: Boolean =
configuration.get[Boolean]("app.features.canSendApplicationsAnywhere")

// This is a feature that is temporary and should be activated
// for short period of time during migrations for smooth handling of files.
// Just remove the env variable FILES_SECOND_INSTANCE_HOST to deactivate.
private val filesSecondInstanceHost: Option[String] =
configuration.getOptional[String]("app.filesSecondInstanceHost")

private val filesExpirationInDays: Int = configuration.get[Int]("app.filesExpirationInDays")

private val dir = Paths.get(s"$filesPath")
if (!Files.isDirectory(dir)) {
Files.createDirectories(dir)
}

private val success = "success"

private def filterVisibleGroups(areaId: UUID, user: User, rights: Authorization.UserRights)(
Expand Down Expand Up @@ -176,8 +158,6 @@ case class ApplicationController @Inject() (
coworkers,
readSharedAccountUserSignature(request.session),
canCreatePhoneMandat = currentArea === Area.calvados,
featureMandatSms = featureMandatSms,
featureCanSendApplicationsAnywhere = featureCanSendApplicationsAnywhere,
categories,
ApplicationFormData.form(request.currentUser)
)
Expand Down Expand Up @@ -268,8 +248,6 @@ case class ApplicationController @Inject() (
coworkers,
None,
canCreatePhoneMandat = currentArea === Area.calvados,
featureMandatSms = featureMandatSms,
featureCanSendApplicationsAnywhere = featureCanSendApplicationsAnywhere,
organisationService.categories,
form,
Nil,
Expand All @@ -296,8 +274,6 @@ case class ApplicationController @Inject() (
coworkers,
None,
canCreatePhoneMandat = currentArea === Area.calvados,
featureMandatSms = featureMandatSms,
featureCanSendApplicationsAnywhere = featureCanSendApplicationsAnywhere,
organisationService.categories,
formWithErrors,
files,
Expand Down Expand Up @@ -985,7 +961,6 @@ case class ApplicationController @Inject() (
selectedArea,
readSharedAccountUserSignature(request.session),
files,
fileExpiryDayCount = filesExpirationInDays
)
).withHeaders(CACHE_CONTROL -> "no-store")
}
Expand Down Expand Up @@ -1024,7 +999,10 @@ case class ApplicationController @Inject() (
withApplication(applicationId) { application: Application =>
val isAuthorized =
Authorization
.fileCanBeShowed(filesExpirationInDays)(metadata.attached, application)(
.fileCanBeShowed(config.filesExpirationInDays)(
metadata.attached,
application
)(
request.currentUser.id,
request.rights
)
Expand Down Expand Up @@ -1113,7 +1091,7 @@ case class ApplicationController @Inject() (
).withHeaders(CACHE_CONTROL -> "no-store")
)
} else {
filesSecondInstanceHost match {
config.filesSecondInstanceHost match {
case None =>
eventService.log(
FileNotFound,
Expand Down
24 changes: 4 additions & 20 deletions app/controllers/AreaController.scala
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
package controllers

import java.util.UUID

import actions.LoginAction
import cats.syntax.all._
import constants.Constants
import controllers.Operators.UserOperators
import helper.UUIDHelper
import javax.inject.{Inject, Singleton}
import models.EventType.{
AllAreaUnauthorized,
Expand All @@ -15,31 +12,25 @@ import models.EventType.{
DeploymentDashboardUnauthorized
}
import models._
import modules.AppConfig
import org.webjars.play.WebJarsUtil
import play.api.mvc.InjectedController
import scala.concurrent.{ExecutionContext, Future}
import serializers.Keys
import services.{EventService, UserGroupService, UserService}

import scala.concurrent.{ExecutionContext, Future}

@Singleton
case class AreaController @Inject() (
config: AppConfig,
loginAction: LoginAction,
eventService: EventService,
userService: UserService,
userGroupService: UserGroupService,
configuration: play.api.Configuration
)(implicit ec: ExecutionContext, val webJarsUtil: WebJarsUtil)
extends InjectedController
with Operators.Common
with UserOperators {

private lazy val areasWithLoginByKey: List[UUID] = configuration.underlying
.getString("app.areasWithLoginByKey")
.split(",")
.flatMap(UUIDHelper.fromString)
.toList

def all =
loginAction.async { implicit request =>
if (!request.currentUser.admin && !request.currentUser.groupAdmin) {
Expand All @@ -55,14 +46,7 @@ case class AreaController @Inject() (
Future(userGroupService.byIds(request.currentUser.groupIds))
}
userGroupsFuture.map { userGroups =>
Ok(
views.html
.allArea(request.currentUser, request.rights)(
Area.all,
areasWithLoginByKey,
userGroups
)
)
Ok(views.html.allArea(request.currentUser, request.rights)(Area.all, userGroups))
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions app/controllers/CSVImportController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ import models.formModels.{
CSVUserGroupFormData
}
import models.{Area, Organisation, User, UserGroup}
import modules.AppConfig
import org.webjars.play.WebJarsUtil
import play.api.Configuration
import play.api.data.Forms._
import play.api.data.validation.Constraints.{maxLength, nonEmpty}
import play.api.data.{Form, Mapping}
Expand All @@ -44,7 +44,7 @@ import services.{EventService, NotificationService, UserGroupService, UserServic
import scala.concurrent.{ExecutionContext, Future}

case class CSVImportController @Inject() (
val configuration: Configuration,
config: AppConfig,
loginAction: LoginAction,
userService: UserService,
groupService: UserGroupService,
Expand Down
4 changes: 2 additions & 2 deletions app/controllers/GroupController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import javax.inject.{Inject, Singleton}
import models.{Area, Authorization, Error, EventType, Organisation, User, UserGroup}
import models.formModels.{normalizedOptionalText, normalizedText, AddUserToGroupFormData}
import org.webjars.play.WebJarsUtil
import play.api.Configuration
import play.api.data.Form
import play.api.data.Forms.{email, ignored, list, mapping, of, optional, text, uuid}
import play.api.data.validation.Constraints.maxLength
Expand All @@ -36,16 +35,17 @@ import models.EventType.{
UserGroupDeletionUnauthorized,
UserGroupEdited
}
import modules.AppConfig
import scala.concurrent.{ExecutionContext, Future}
import serializers.Keys

@Singleton
case class GroupController @Inject() (
config: AppConfig,
applicationService: ApplicationService,
loginAction: LoginAction,
groupService: UserGroupService,
eventService: EventService,
configuration: Configuration,
ws: WSClient,
userService: UserService
)(implicit ec: ExecutionContext, webJarsUtil: WebJarsUtil)
Expand Down
5 changes: 3 additions & 2 deletions app/controllers/HomeController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ package controllers
import javax.inject.{Inject, Singleton}
import actions.LoginAction
import org.webjars.play.WebJarsUtil
import play.api.{Configuration, Logger}
import modules.AppConfig
import play.api.Logger
import play.api.mvc._
import play.api.db.Database
import serializers.Keys
Expand All @@ -13,7 +14,7 @@ import views.home.LoginPanel
*/
@Singleton
class HomeController @Inject() (
val configuration: Configuration,
val config: AppConfig,
loginAction: LoginAction,
db: Database
)(implicit webJarsUtil: WebJarsUtil)
Expand Down
20 changes: 10 additions & 10 deletions app/controllers/LoginController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import java.time.ZoneId
import javax.inject.{Inject, Singleton}
import models.EventType.{GenerateToken, UnknownEmail}
import models.{Authorization, EventType, LoginToken, User}
import modules.AppConfig
import org.webjars.play.WebJarsUtil
import play.api.Configuration
import play.api.mvc.{Action, AnyContent, InjectedController, Request}
import serializers.Keys
import services.{EventService, NotificationService, SignupService, TokenService, UserService}
Expand All @@ -17,19 +17,16 @@ import scala.concurrent.{ExecutionContext, Future}

@Singleton
class LoginController @Inject() (
val config: AppConfig,
userService: UserService,
notificationService: NotificationService,
tokenService: TokenService,
val configuration: Configuration,
eventService: EventService,
signupService: SignupService
)(implicit ec: ExecutionContext, webJarsUtil: WebJarsUtil)
extends InjectedController
with Operators.Common {

private lazy val tokenExpirationInMinutes =
configuration.get[Int]("app.tokenExpirationInMinutes")

/** Security Note: when the email is in the query "?email=xxx", we do not check the CSRF token
* because the API is used externally.
*/
Expand Down Expand Up @@ -73,15 +70,20 @@ class LoginController @Inject() (
case Some(signup) =>
val loginToken =
LoginToken
.forSignupId(signup.id, tokenExpirationInMinutes, request.remoteAddress)
.forSignupId(
signup.id,
config.tokenExpirationInMinutes,
request.remoteAddress
)
loginHappyPath(loginToken, signup.email, None)
}
)
)
} { user: User =>
LoginAction.readUserRights(user).map { userRights =>
val loginToken =
LoginToken.forUserId(user.id, tokenExpirationInMinutes, request.remoteAddress)
LoginToken
.forUserId(user.id, config.tokenExpirationInMinutes, request.remoteAddress)
val requestWithUserData =
new RequestWithUserData(user, userRights, request)
loginHappyPath(loginToken, user.email, requestWithUserData.some)
Expand Down Expand Up @@ -150,7 +152,6 @@ class LoginController @Inject() (
LoginPanel.EmailSentFeedback(
email,
requestWithUserData.map(_.currentUser.timeZone).getOrElse(Time.timeZoneParis),
tokenExpirationInMinutes,
successMessage
)
)
Expand All @@ -177,8 +178,7 @@ class LoginController @Inject() (
Ok(
views.html.magicLinkAntiConsumptionPage(
token = token,
pathToRedirectTo = path,
tokenExpirationInMinutes = tokenExpirationInMinutes
pathToRedirectTo = path
)
)
case _ =>
Expand Down
4 changes: 2 additions & 2 deletions app/controllers/MandatController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import controllers.Operators.UserOperators
import javax.inject.{Inject, Singleton}
import models.mandat.{Mandat, SmsMandatInitiation}
import models.{Error, EventType, Sms}
import modules.AppConfig
import org.webjars.play.WebJarsUtil
import play.api.Configuration
import play.api.libs.json.{JsError, JsString, JsValue, Json}
import play.api.mvc.{Action, AnyContent, InjectedController, PlayBodyParsers}
import serializers.JsonFormats._
Expand All @@ -22,7 +22,7 @@ import scala.concurrent.{ExecutionContext, Future}
@Singleton
case class MandatController @Inject() (
bodyParsers: PlayBodyParsers,
val configuration: Configuration,
config: AppConfig,
eventService: EventService,
loginAction: LoginAction,
mandatService: MandatService,
Expand Down
6 changes: 3 additions & 3 deletions app/controllers/Operators.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import constants.Constants
import helper.BooleanHelper.not
import models.EventType._
import models.{Application, Authorization, Error, EventType, User, UserGroup}
import play.api.Configuration
import modules.AppConfig
import play.api.mvc.Results.{InternalServerError, NotFound, Unauthorized}
import play.api.mvc.{AnyContent, RequestHeader, Result, Results}
import scala.concurrent.{ExecutionContext, Future}
Expand All @@ -18,14 +18,14 @@ import views.MainInfos
object Operators {

trait Common {
def configuration: Configuration
def config: AppConfig

implicit def mainInfos(implicit request: RequestHeader): MainInfos = {
val isDemo = request.domain.contains("localhost") ||
request.domain.contains("demo")
MainInfos(
isDemo = isDemo,
topHeaderWarningMessage = configuration.getOptional[String]("app.topHeaderWarningMessage")
config = config
)
}

Expand Down
4 changes: 2 additions & 2 deletions app/controllers/SignupController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ import java.util.UUID
import javax.inject.{Inject, Singleton}
import models.{Authorization, Error, EventType, SignupRequest, User}
import models.formModels.{AddSignupsFormData, SignupFormData}
import modules.AppConfig
import org.webjars.play.WebJarsUtil
import play.api.Configuration
import play.api.data.Form
import play.api.i18n.I18nSupport
import play.api.mvc.{Action, AnyContent, InjectedController, Request, Result}
Expand All @@ -24,7 +24,7 @@ import services.{EventService, NotificationService, SignupService, UserGroupServ

@Singleton
case class SignupController @Inject() (
configuration: Configuration,
config: AppConfig,
eventService: EventService,
groupService: UserGroupService,
loginAction: LoginAction,
Expand Down
4 changes: 2 additions & 2 deletions app/controllers/UserController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ import models.formModels.{
EditUserFormData,
ValidateSubscriptionForm
}
import modules.AppConfig
import org.postgresql.util.PSQLException
import org.webjars.play.WebJarsUtil
import play.api.Configuration
import play.api.data.Forms._
import play.api.data.validation.Constraints.{maxLength, nonEmpty}
import play.api.data.{Form, Mapping}
Expand All @@ -70,12 +70,12 @@ import services._

@Singleton
case class UserController @Inject() (
config: AppConfig,
loginAction: LoginAction,
userService: UserService,
groupService: UserGroupService,
applicationService: ApplicationService,
notificationsService: NotificationService,
configuration: Configuration,
eventService: EventService
)(implicit ec: ExecutionContext, webJarsUtil: WebJarsUtil)
extends InjectedController
Expand Down
Loading