играть аутентификацию scala wsclient silhouette внутри вызова -> AhcWSResponse Unauthorized - PullRequest
0 голосов
/ 11 марта 2019

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))

...