app/controllers/Audit.scala (72 lines of code) (raw):

package controllers import aws.AuditTrailDB import com.gu.googleauth.AuthAction import com.gu.janus.model.JanusData import logic.Date import play.api.{Logging, Mode} import play.api.mvc.{AbstractController, AnyContent, ControllerComponents} import software.amazon.awssdk.services.dynamodb.DynamoDbClient class Audit( janusData: JanusData, controllerComponents: ControllerComponents, authAction: AuthAction[AnyContent] )(implicit dynamodDB: DynamoDbClient, mode: Mode, assetsFinder: AssetsFinder) extends AbstractController(controllerComponents) with Logging { def byAccount(account: String) = authAction { implicit request => val date = request.getQueryString( "date" ) flatMap Date.parseUtcDateStr getOrElse Date.todayUtc val (startDate, endDate) = Date.weekAround(date) logger.info(s"Getting logs for $account from $startDate to $endDate") val auditLogs = AuditTrailDB.getAccountLogs(account, startDate, endDate) val prevNextWeeks = Date.prevNextAuditWeeks(date) Ok( views.html.audit( auditLogs, Right(account), startDate, prevNextWeeks, request.user, janusData ) ) } def byUser(username: String) = authAction { implicit request => val date = request.getQueryString( "date" ) flatMap Date.parseUtcDateStr getOrElse Date.todayUtc val (startDate, endDate) = Date.weekAround(date) logger.info(s"Getting logs for $username from $startDate to $endDate") val auditLogs = AuditTrailDB.getUserLogs(username, startDate, endDate) val prevNextWeeks = Date.prevNextAuditWeeks(date) Ok( views.html.audit( auditLogs, Left(username), startDate, prevNextWeeks, request.user, janusData ) ) } def changeUserDate(username: String) = authAction { implicit request => val logDateStrOpt = for { submission <- request.body.asFormUrlEncoded logDateSubmission <- submission.get("audit-date") logDateStr <- logDateSubmission.headOption } yield logDateStr val param = logDateStrOpt.fold("")(s => s"?date=$s") SeeOther(s"/audit/user/$username$param") } def changeAccountDate(account: String) = authAction { implicit request => val logDateStrOpt = for { submission <- request.body.asFormUrlEncoded logDateSubmission <- submission.get("audit-date") logDateStr <- logDateSubmission.headOption } yield logDateStr val param = logDateStrOpt.fold("")(s => s"?date=$s") SeeOther(s"/audit/account/$account$param") } }