2016-07-22 4 views
1
scala> play.api.libs.Crypto.encryptAES("test") 
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'play.crypto.secret' 

Я установил переменную в application.conf, но я не уверен, как генерировать глобальное состояние таким образом, что Crypto поднимает переменную.Использование play.api.libs.Crypto из консоли

The documentation неправилен:

scala> import play.api._ 
import play.api._ 

scala> val application = new DefaultApplication(new File("."), this.getClass.getClassloader, None, Play.Mode.Dev) 
<console>:14: error: not enough arguments for constructor DefaultApplication: (environment: play.api.Environment, applicationLifecycle: play.api.inject.DefaultApplicationLifecycle, injector: play.api.inject.Injector, configuration: play.api.Configuration, requestHandler: play.api.http.HttpRequestHandler, errorHandler: play.api.http.HttpErrorHandler, actorSystem: akka.actor.ActorSystem, plugins: play.api.Plugins)play.api.DefaultApplication. 
Unspecified value parameters requestHandler, errorHandler, actorSystem... 
     val application = new DefaultApplication(new File("."), this.getClass.getClassloader, None, Play.Mode.Dev) 

Я пробовал загрузку в test:console и загрузку через

val application = new play.api.test.FakeApplication(additionalConfiguration = Map("play.application.secret" -> "foobar")) 

Но это не загрузить его в глобальный объект конфигурации.

+0

Как насчет использования конструктора Crypto и передачи в криптоконфигурации? – rethab

+0

@rethab используется таким образом в библиотеке. – Reactormonk

+0

Не уверен, если я получу то, что вы говорите. В заголовке я читал «из консоли» – rethab

ответ

0

способ грубой силы - запустить приложение из консоли, и это зависит от того, настраиваете ли вы ApplicationLoader или нет. в моем случае, я делаю (чтобы я мог использовать macwire для DI). вот как это работает для меня, у меня есть это в моем build.sbt:

initialCommands in console := """ 
    import play.api.{ApplicationLoader, Environment, Mode} 
    import com.projectname.apiserver.global.MacwireApplicationLoader 
    import com.projectname.apiserver.model._ 
    val env = Environment(new java.io.File("."), this.getClass.getClassLoader, Mode.Dev) 
    val context = ApplicationLoader.createContext(env) 
    val loader = new MacwireApplicationLoader 
    val registry = loader.loadRegistry(context) 
    import registry._ 
""" 

и загрузчик пользовательских приложений:

/** 
* MacwireApplicationLoader replaces the default Play application loader with a 
* compile time DI system (using macwire). 
* 
* More info: https://www.playframework.com/documentation/2.5.x/ScalaCompileTimeDependencyInjection 
*/ 
class MacwireApplicationLoader extends ApplicationLoader { 
    def load(context: Context) = loadRegistry(context).application 

    def loadRegistry(context: Context): BuiltInComponentsFromContext with Registry = 
    new BuiltInComponentsFromContext(context) 
     with AppComponents 
     with ApplyEvolutions 
} 

trait AppComponents 
    extends BuiltInComponents 
    with NingWSComponents 
    with Registry { 

    lazy val assets: Assets = wire[Assets] 
    lazy val config = configuration 
    lazy val app = application 
    lazy val ws = wsClient 

    lazy val router: Router = { 
    lazy val prefix = "/" 
    wire[Routes] 
    } 

} 

trait ApplyEvolutions extends EvolutionsComponents { 
    applicationEvolutions 
    override def dynamicEvolutions = new DynamicEvolutions 
} 

тогда, когда я войти в консоль, я просто не могу сделать:

[api-server] $ console 
[info] Starting scala interpreter... 
[info] 
2016-07-23 11:11:01,106 [INFO] [p.a.d.DefaultDBApi] - Database [default] connected at jdbc:postgresql://localhost:5432/databasename 
import play.api.{ApplicationLoader, Environment, Mode} 
import com.projectname.apiserver.global.MacwireApplicationLoader 
import com.projectname.apiserver.model._ 
env: play.api.Environment = Environment(.,[email protected]9,Dev) 
context: play.api.ApplicationLoader.Context = Context(Environment(.,[email protected]9,Dev),None,[email protected],Configuration(Config(SimpleConfigObject({"akka":{"actor":{"creation-timeout":"20s","debug":{"autoreceive":"off","event-stream":"off","fsm":"off","lifecycle":"off","receive":"off","router-misconfiguration":"off","unhandled":"off"},"default-dispatcher":{"attempt-teamwork":"on","default-executor":{"fallback":"fork-join-executor"},"executor":"defa...Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45). 
Type in expressions for evaluation. Or try :help. 

scala> crypto.encryptAES("test") 
res0: String = 2-ZLIW79WqQff4SDZ+aWLkf38cZyU=