Play 2.7 (scala) и Silhouette с WSClient. Я хочу вызвать маршрут внутри моего из другого метода.Другими словами, я хочу обработать форму и загруженные изображения, которые я хочу переслать в другую часть моего приложения, чтобы получить только UUID, который используется для поиска изображения в моем каталоге.Я сохраняю UUID в базе данных.
Это может сделать только зарегистрированный и зарегистрированный пользователь.К этому моменту все нормально.
def executeDescriptionForm(catId: UUID,
languageCode: Option[String]) = silhouette.SecuredAction(With.adminPrivileges).async(parse.multipartFormData(maxLength = Long.MaxValue)){implicit req ⇒
models.form.Description.form.bindFromRequest().fold(
err ⇒ Future.successful(BadRequest(views.html.admins.forms.descriptionForm(catId,routes.CategoryController.executeDescriptionForm(catId,languageCode),err,languageCode)) ),
ok ⇒ {
categoryService.find(catId).flatMap{
case Some(cat) ⇒
val save = categoryService.save(
cat.copy(descriptions = Description(ok.title,ok.htmlShort,ok.html,ok.languageIsoCode,Nil) :: cat.descriptions.filterNot(_.languageIsoCode.equalsIgnoreCase(ok.languageIsoCode) ).toList )
)
save.foreach{data ⇒
println("FANGE AN! " + req.body.files.size)
println(req.host)
//TODO klappt noch NICHT!
val host = if(req.host.startsWith("http")) req.host else s"http://${req.host}"
// Future.sequence(
req.body.files.headOption.map{file ⇒
println("FILES: " + file.filename)
val tempFile = File.createTempFile("temp",file.filename)
file.ref.moveFileTo(tempFile,true)
val t = Source.single(FilePart("picture",file.filename,file.contentType,FileIO.fromPath(tempFile.toPath)))
val csrf = CSRF.getToken
println("FIRE")
println(req.headers.toSimpleMap.toSeq)
req.cookies.foreach(println)
println("AUTH: " + req.authenticator)
req.authenticator
ws.url(s"$host/binary/picture/upload")
/*.withCookies(req.cookies.map(r ⇒ DefaultWSCookie(r.name,r.value,r.domain,Some(r.path),r.maxAge.map(_.toLong),r.secure,r.httpOnly)).toSeq:_*)*/
/*.withHttpHeaders( "Cookie" → req.headers.toSimpleMap("Cookie"))*/.post(t).flatMap{result ⇒
println(result)
val ret = Try(Json.parse(result.body).as[UUID]) match {
case Success(uuid) ⇒ categoryService.addPictureToDescription(cat.id,ok.languageIsoCode,uuid,file.filename)
case _ ⇒ Future.successful(())
}
tempFile.delete()
ret
}.recover{
case e ⇒ println(e)
}
}
// )
}
save.map{_ ⇒
Redirect(routes.CategoryController.overview())
}
case _ ⇒ Future.failed(new RuntimeException("No category found"))
}
}
).recover{
case err ⇒ BadRequest(views.html.admins.forms.descriptionForm(catId,routes.CategoryController.executeDescriptionForm(catId,languageCode),models.form.Description.form.bindFromRequest().bindFromRequest().withGlobalError(err.toString),languageCode))
}
}
Я получаю эту ошибку AhcWSResponse (StandaloneAhcWSResponse (401, Unauthorized))