app/lib/actions/Actions.scala (38 lines of code) (raw):

package lib.actions import com.madgag.github.Implicits._ import com.madgag.playgithub.auth.AuthenticatedSessions.AccessToken import com.madgag.playgithub.auth.AuthenticatedSessions.AccessToken.Provider import com.madgag.playgithub.auth.GHRequest import com.madgag.scalagithub.model.RepoId import controllers.routes import lib._ import play.api.mvc.Results.Redirect import play.api.mvc._ import scala.concurrent.{ExecutionContext, Future} class Actions( bot: Bot, bodyParser: BodyParser[AnyContent] )(implicit authClient: com.madgag.playgithub.auth.Client, ec: ExecutionContext ) { private val authScopes = Seq("repo") implicit val provider: Provider = AccessToken.FromSession val GitHubAuthenticatedAction: ActionBuilder[GHRequest, AnyContent] = com.madgag.playgithub.auth.Actions.gitHubAction(authScopes, bot.workingDir, bodyParser) def repoAccessFilter(repoId: RepoId): ActionFilter[GHRequest] = new ActionFilter[GHRequest] { def executionContext = ec override protected def filter[A](req: GHRequest[A]): Future[Option[Result]] = { for { user <- req.userF userViewOfRepo <- req.gitHub.getRepo(repoId).trying } yield { println(s"******* ${user.atLogin} ${userViewOfRepo.map(r => r.full_name + " " + r.permissions)}") if (userViewOfRepo.isSuccess) None else Some( Redirect(routes.Application.index()).flashing("message" -> s"You can't see a ${repoId.fullName} repo") ) } } } def repoAuthenticated(repoId: RepoId) = GitHubAuthenticatedAction andThen repoAccessFilter(repoId) }