diff --git a/modules/security/src/main/Api.scala b/modules/security/src/main/Api.scala index cde5db9dce..133d5263da 100644 --- a/modules/security/src/main/Api.scala +++ b/modules/security/src/main/Api.scala @@ -78,6 +78,14 @@ private[security] final class Api(firewall: Firewall, tor: Tor) { _.flatMap(_.getAs[String]("user")) } } + + def userIdsByIp(ip: String): Fu[List[String]] = + tube.storeColl.find( + BSONDocument("ip" -> ip), + BSONDocument("user" -> true) + ).cursor[BSONDocument]().collect[List]().map { + _.flatMap(_.getAs[String]("user")) + }.map(_.distinct) } object Api { diff --git a/modules/security/src/main/Whois.scala b/modules/security/src/main/Whois.scala index 96a678a513..380d0f8214 100644 --- a/modules/security/src/main/Whois.scala +++ b/modules/security/src/main/Whois.scala @@ -8,7 +8,7 @@ final class Whois(key: String, api: Api, tor: Tor, userJson: lila.user.JsonView) def apply(ip: String, reqKey: String): Fu[Either[String, JsObject]] = if (reqKey != key) fuccess(Left("Invalid key")) - else api.userIdsSharingIp(ip) flatMap lila.user.UserRepo.byIds map { users => + else api.userIdsByIp(ip) flatMap lila.user.UserRepo.byIds map { users => Right(Json.obj( "ip" -> ip, "tor" -> tor.isExitNode(ip),