| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- 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 initalized = false
- def initalizer() = Action.async { implicit request: Request[AnyContent] =>
- db.withCollection(User) { users =>
- import org.mongodb.scala.model.Filters._
- users.find(equal("isAdmin", true)).head()
- }.flatten.map {
- case null => Ok(views.html.initalizer())
- case _ =>
- initalized = true;
- MovedPermanently(routes.ViewController.loader("").url)
- }
- }
- // 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]]] =>
- 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({ _ =>
- initalized = true;
- MovedPermanently(routes.ViewController.loader("").url)
- })
- }
- def loader(s: String) = Action { implicit request: Request[AnyContent] =>
- if (initalized)
- Ok(views.html.viewLoader())
- else
- TemporaryRedirect(routes.ViewController.initalizer().url)
- }
- }
|