lila/modules/oauth/src/main/Env.scala

55 lines
1.3 KiB
Scala

package lila.oauth
import akka.actor._
import com.softwaremill.macwire._
import io.methvin.play.autoconfig._
import play.api.Configuration
import scala.concurrent.duration._
import lila.common.config._
import lila.db.AsyncColl
private case class OauthConfig(
@ConfigName("mongodb.uri") mongoUri: String,
@ConfigName("collection.access_token") tokenColl: CollName,
@ConfigName("collection.app") appColl: CollName
)
@Module
final class Env(
appConfig: Configuration,
cacheApi: lila.memo.CacheApi,
userRepo: lila.user.UserRepo,
mongo: lila.db.Env
)(implicit
ec: scala.concurrent.ExecutionContext,
system: ActorSystem
) {
private val config = appConfig.get[OauthConfig]("oauth")(AutoConfig.loader)
private lazy val db = mongo.asyncDb("oauth", config.mongoUri)
private lazy val colls = new OauthColls(db(config.tokenColl), db(config.appColl))
lazy val appApi = wire[OAuthAppApi]
lazy val server = wire[OAuthServer]
lazy val tryServer: OAuthServer.Try = () =>
scala.concurrent
.Future {
server.some
}
.withTimeoutDefault(50 millis, none) recover { case e: Exception =>
lila.log("security").warn("oauth", e)
none
}
lazy val tokenApi = wire[PersonalTokenApi]
def forms = OAuthForm
}
private class OauthColls(val token: AsyncColl, val app: AsyncColl)