42 lines
1.1 KiB
Scala
42 lines
1.1 KiB
Scala
package lila.mod
|
|
|
|
import akka.stream.scaladsl._
|
|
import play.api.libs.json._
|
|
|
|
import lila.common.{ Bus, HTTPRequest }
|
|
import lila.security.UserSignup
|
|
|
|
final class ModStream {
|
|
|
|
private val classifier = "userSignup"
|
|
|
|
private val blueprint =
|
|
Source
|
|
.queue[UserSignup](32, akka.stream.OverflowStrategy.dropHead)
|
|
.map { case UserSignup(user, email, req, fp, suspIp) =>
|
|
Json.obj(
|
|
"t" -> "signup",
|
|
"username" -> user.username,
|
|
"email" -> email.value,
|
|
"ip" -> HTTPRequest.ipAddress(req).value,
|
|
"suspIp" -> suspIp,
|
|
"userAgent" -> HTTPRequest.userAgent(req),
|
|
"fingerPrint" -> fp.map(_.value)
|
|
)
|
|
}
|
|
.map { js =>
|
|
s"${Json.stringify(js)}\n"
|
|
}
|
|
|
|
def apply(): Source[String, _] =
|
|
blueprint mapMaterializedValue { queue =>
|
|
val sub = Bus.subscribeFun(classifier) { case signup: UserSignup =>
|
|
queue.offer(signup).unit
|
|
}
|
|
|
|
queue.watchCompletion() dforeach { _ =>
|
|
Bus.unsubscribe(sub, classifier)
|
|
}
|
|
}
|
|
}
|