Skip to content

Commit

Permalink
Adding beta white list; removing admin-only filter
Browse files Browse the repository at this point in the history
  • Loading branch information
kiambogo committed Jun 23, 2017
1 parent df807fb commit 636bde9
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 19 deletions.
1 change: 1 addition & 0 deletions api/app/Module.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class Module(environment: Environment, configuration: Configuration) extends Abs
bind(classOf[MiniSegmentsDao]).to(classOf[PostgresMiniSegmentsDao])
bind(classOf[SegmentRatingsDao]).to(classOf[PostgresSegmentRatingsDao])
bind(classOf[TileCacheExpirationsDao]).to(classOf[PostgresTileCacheExpirationsDao])
bind(classOf[BetaUserWhitelistDao]).to(classOf[PostgresBetaUserWhitelistDao])

// Services
bind(classOf[RoutingService]).to(classOf[RoutingServiceImpl])
Expand Down
8 changes: 8 additions & 0 deletions api/app/db/Tables.scala
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,12 @@ class Users(tag: Tag) extends Table[User](tag, "users") {

val tileCacheExpirations = TableQuery[TileCacheExpirations]

class BetaUserWhitelist(tag: Tag) extends Table[(String)](tag, "beta_user_whitelist") {
def email = column[String]("email")

override def * = (email)
}

val betaUserWhitelist = TableQuery[BetaUserWhitelist]

}
13 changes: 13 additions & 0 deletions api/app/db/dao/BetaUserWhitelistDao.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package db.dao

import java.util.UUID
import org.joda.time.DateTime

import com.trifectalabs.roadquality.v0.models.SegmentRating

import scala.concurrent.Future

// TODO: Remove after beta
trait BetaUserWhitelistDao {
def exists(email: String): Future[Boolean]
}
22 changes: 22 additions & 0 deletions api/app/db/dao/PostgresBetaUserWhitelistDao.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package db.dao

import javax.inject.{Inject, Singleton}

import db.MyPostgresDriver
import db.Tables._
import play.api.db.slick.{DatabaseConfigProvider, HasDatabaseConfigProvider}

import scala.concurrent.{ExecutionContext, Future}

// TODO: Remove after beta
@Singleton
class PostgresBetaUserWhitelistDao @Inject() (protected val dbConfigProvider: DatabaseConfigProvider)(implicit ec: ExecutionContext)
extends BetaUserWhitelistDao with HasDatabaseConfigProvider[MyPostgresDriver] {
import _root_.db.TablesHelper._
import profile.api._

override def exists(email: String): Future[Boolean] = {
db.run(betaUserWhitelist.filter(m => m.email === email.trim).exists.result)
}

}
4 changes: 1 addition & 3 deletions api/app/util/actions/AuthenticatedRequest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,7 @@ object Authenticated extends ActionBuilder[AuthenticatedRequest] {
case Some(user) => {
try {
block {
val r = new AuthenticatedRequest(user, request)
r.requireAdmin
r
new AuthenticatedRequest(user, request)
}
} catch {
case e: UnauthenticatedException => Future(Unauthorized(e.msg))
Expand Down
34 changes: 18 additions & 16 deletions web/app/util/OAuth2.scala
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ import play.api.Configuration

import com.trifectalabs.roadquality.v0.models.{ User, UserRole }
import com.trifectalabs.roadquality.v0.models.json._
import db.dao.UsersDao
import db.dao.{ UsersDao, BetaUserWhitelistDao }

class OAuth2 @Inject() (configuration: Configuration, ws: WSClient, userDao: UsersDao, jwt: JwtUtil) extends Controller {
class OAuth2 @Inject() (configuration: Configuration, ws: WSClient, userDao: UsersDao, jwt: JwtUtil, betaList: BetaUserWhitelistDao) extends Controller {
lazy val stravaAuthUri = configuration.getString("strava.auth.uri").get
lazy val stravaTokenUri = configuration.getString("strava.auth.token_uri").get
lazy val stravaClientId = configuration.getString("strava.client.id").get
Expand All @@ -34,22 +34,24 @@ class OAuth2 @Inject() (configuration: Configuration, ws: WSClient, userDao: Use
} yield {
if (state == oauthState) {
getStravaUserData(code).flatMap { userData =>
userDao.upsert(
userData.firstName,
userData.lastName,
userData.email,
userData.city,
userData.province,
userData.country,
None,
userData.sex,
userData.stravaToken).map { user =>
val jwtToken = jwt.createToken(user)
if (user.role == UserRole.Admin)
betaList.exists(userData.email).flatMap { isBetaUser =>
if (isBetaUser) {
userDao.upsert(
userData.firstName,
userData.lastName,
userData.email,
userData.city,
userData.province,
userData.country,
None,
userData.sex,
userData.stravaToken).map { user =>
val jwtToken = jwt.createToken(user)
Redirect(s"/app?token=$jwtToken")
else
Redirect("/")
}
}
else Future(Redirect("/"))
}
}.recover {
case ex: IllegalStateException => Unauthorized(ex.getMessage)
}
Expand Down

0 comments on commit 636bde9

Please sign in to comment.