bump mobile version to 2, escape chat messages on version 1
This commit is contained in:
parent
c2d1383769
commit
7942f546ef
|
@ -79,7 +79,7 @@ object Round extends LilaController with TheftPrevention {
|
||||||
else Env.api.roundApi.player(pov, apiVersion) zip
|
else Env.api.roundApi.player(pov, apiVersion) zip
|
||||||
getPlayerChat(pov.game) map {
|
getPlayerChat(pov.game) map {
|
||||||
case (data, chat) => Ok(chat.fold(data) { c =>
|
case (data, chat) => Ok(chat.fold(data) { c =>
|
||||||
data + ("chat" -> lila.chat.JsonView(c))
|
data + ("chat" -> lila.chat.JsonView(c, mobileEscape = apiVersion == 1))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}.mon(_.http.response.player.mobile)
|
}.mon(_.http.response.player.mobile)
|
||||||
|
|
|
@ -15,7 +15,7 @@ object Mobile {
|
||||||
// date when the server stops accepting requests
|
// date when the server stops accepting requests
|
||||||
unsupportedAt: DateTime)
|
unsupportedAt: DateTime)
|
||||||
|
|
||||||
def currentVersion = 1
|
def currentVersion = 2
|
||||||
|
|
||||||
def oldVersions: List[Old] = List(
|
def oldVersions: List[Old] = List(
|
||||||
// old version 0 is just an example, so the list is never empty :)
|
// old version 0 is just an example, so the list is never empty :)
|
||||||
|
@ -23,14 +23,19 @@ object Mobile {
|
||||||
Old(
|
Old(
|
||||||
version = 0,
|
version = 0,
|
||||||
deprecatedAt = new DateTime("2014-08-01"),
|
deprecatedAt = new DateTime("2014-08-01"),
|
||||||
unsupportedAt = new DateTime("2014-12-01"))
|
unsupportedAt = new DateTime("2014-12-01")),
|
||||||
|
Old( // chat messages are html escaped
|
||||||
|
version = 1,
|
||||||
|
deprecatedAt = new DateTime("2016-07-13"),
|
||||||
|
unsupportedAt = new DateTime("2016-10-13"))
|
||||||
)
|
)
|
||||||
|
|
||||||
private val PathPattern = """^.+/socket/v(\d+)$""".r
|
private val PathPattern = """^.+/socket/v(\d+)$""".r
|
||||||
|
|
||||||
def requestVersion(req: RequestHeader): Option[Int] = {
|
def requestVersion(req: RequestHeader): Option[Int] = {
|
||||||
val accepts = ~req.headers.get(HeaderNames.ACCEPT)
|
val accepts = ~req.headers.get(HeaderNames.ACCEPT)
|
||||||
if (accepts contains "application/vnd.lichess.v1+json") some(1)
|
if (accepts contains "application/vnd.lichess.v2+json") Some(2)
|
||||||
|
else if (accepts contains "application/vnd.lichess.v1+json") Some(1)
|
||||||
else req.path match {
|
else req.path match {
|
||||||
case PathPattern(version) => parseIntOption(version)
|
case PathPattern(version) => parseIntOption(version)
|
||||||
case _ => None
|
case _ => None
|
||||||
|
|
|
@ -34,6 +34,8 @@ case class UserChat(
|
||||||
})
|
})
|
||||||
|
|
||||||
def add(line: UserLine) = copy(lines = lines :+ line)
|
def add(line: UserLine) = copy(lines = lines :+ line)
|
||||||
|
|
||||||
|
def mapLines(f: UserLine => UserLine) = copy(lines = lines map f)
|
||||||
}
|
}
|
||||||
|
|
||||||
object UserChat {
|
object UserChat {
|
||||||
|
@ -51,6 +53,8 @@ case class MixedChat(
|
||||||
case l: UserLine => !l.troll
|
case l: UserLine => !l.troll
|
||||||
case l: PlayerLine => true
|
case l: PlayerLine => true
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
def mapLines(f: Line => Line) = copy(lines = lines map f)
|
||||||
}
|
}
|
||||||
|
|
||||||
object Chat {
|
object Chat {
|
||||||
|
|
|
@ -1,16 +1,30 @@
|
||||||
package lila.chat
|
package lila.chat
|
||||||
|
|
||||||
import lila.common.PimpedJson._
|
|
||||||
import lila.common.LightUser
|
import lila.common.LightUser
|
||||||
|
import lila.common.PimpedJson._
|
||||||
|
import org.apache.commons.lang3.StringEscapeUtils.escapeHtml4
|
||||||
import play.api.libs.json._
|
import play.api.libs.json._
|
||||||
|
|
||||||
object JsonView {
|
object JsonView {
|
||||||
|
|
||||||
def apply(chat: AnyChat): JsValue = chat match {
|
def apply(chat: AnyChat, mobileEscape: Boolean = false): JsValue = {
|
||||||
|
if (mobileEscape) escapeHtml(chat)
|
||||||
|
else chat
|
||||||
|
} match {
|
||||||
case c: MixedChat => mixedChatWriter writes c
|
case c: MixedChat => mixedChatWriter writes c
|
||||||
case c: UserChat => userChatWriter writes c
|
case c: UserChat => userChatWriter writes c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private def escapeHtml(chat: AnyChat) = chat match {
|
||||||
|
case c: MixedChat => c.mapLines {
|
||||||
|
case l: UserLine => l.copy(text = escapeHtml4(l.text))
|
||||||
|
case l: PlayerLine => l.copy(text = escapeHtml4(l.text))
|
||||||
|
}
|
||||||
|
case c: UserChat => c.mapLines { l =>
|
||||||
|
l.copy(text = escapeHtml4(l.text))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
def apply(line: Line): JsValue = lineWriter writes line
|
def apply(line: Line): JsValue = lineWriter writes line
|
||||||
|
|
||||||
def userModInfo(u: UserModInfo)(implicit lightUser: LightUser.Getter) =
|
def userModInfo(u: UserModInfo)(implicit lightUser: LightUser.Getter) =
|
||||||
|
|
Loading…
Reference in a new issue