lila/modules/mod/src/main/ModStream.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)
}
}
}