| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- package com.weEat.controllers
- import javax.inject._
- import play.api.mvc._
- import com.weEat.services.MongoDBService
- import com.weEat.models.User
- import scala.concurrent.Future
- import org.bson.types.ObjectId
- /**
- * This controller creates an `Action` to handle HTTP requests to the
- * application's home page.
- */
- @Singleton
- class ViewController @Inject()(
- val controllerComponents: ControllerComponents,
- db: MongoDBService
- ) (implicit
- val webJarsUtil: org.webjars.play.WebJarsUtil
- ) extends BaseController {
- implicit val ec = scala.concurrent.ExecutionContext.global
- private var initialized = false
- private def _is_initialized: Future[Boolean] = {
- if (initialized) Future.successful(true)
- else db.withCollection(User) { (users) =>
- import org.mongodb.scala.model.Filters._
- users.find(equal("isAdmin", true)).head()
- }.flatten.map({ (user) =>
- initialized = user != null
- initialized
- })
- }
- def initalizer() = Action.async { implicit request: Request[AnyContent] =>
- _is_initialized map {
- case true => MovedPermanently(routes.ViewController.loader("").url)
- case false => Ok(views.html.initalizer())
- }
- }
- // Basically everything about this function is a special case.
- // I don't like it, but it is unique among every other bit of functionality.
- def initalize() = Action.async(parse.formUrlEncoded) {
- implicit request: Request[Map[String, Seq[String]]] =>
- // First verify that we haven't already been initialized
- db.withCollection(User) { (users) =>
- import org.mongodb.scala.model.Filters._
- import com.github.t3hnar.bcrypt.BCryptStrOps
- users.find(equal("isAdmin", true)).head().flatMap {
- case null => users.insertOne(User(
- new ObjectId,
- request.body("fname")(0),
- request.body("lname")(0),
- request.body("email")(0),
- request.body("password")(0).boundedBcrypt,
- isAdmin = true
- )).head()
- case existingAdmin => Future.successful(existingAdmin)
- }
- }.flatten.map({ (_) =>
- initialized = true;
- MovedPermanently(routes.ViewController.loader("").url)
- })
- }
- def loader(s: String) = Action.async { implicit request: Request[AnyContent] =>
- _is_initialized map {
- case true => Ok(views.html.viewLoader())
- case false => TemporaryRedirect(routes.ViewController.initalizer().url)
- }
- }
- }
|