Skip to content

Commit 577e292

Browse files
committed
let facebook bot fetch game images
1 parent a93c16b commit 577e292

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

app/controllers/Export.scala

+9-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ object Export extends LilaController {
1515
private def env = Env.game
1616

1717
def pgn(id: String) = Open { implicit ctx =>
18-
NotForBots {
18+
OnlyHumans {
1919
OptionFuResult(GameRepo game id) { game =>
2020
(game.pgnImport.ifTrue(~get("as") == "imported") match {
2121
case Some(i) => fuccess(i.pgn)
@@ -34,7 +34,7 @@ object Export extends LilaController {
3434
}
3535

3636
def pdf(id: String) = Open { implicit ctx =>
37-
NotForBots {
37+
OnlyHumans {
3838
OptionResult(GameRepo game id) { game =>
3939
Ok.chunked(Enumerator.outputStream(env.pdfExport(game.id))).withHeaders(
4040
CONTENT_TYPE -> "application/pdf",
@@ -44,7 +44,7 @@ object Export extends LilaController {
4444
}
4545

4646
def png(id: String) = Open { implicit ctx =>
47-
NotForBots {
47+
OnlyHumansAndFacebook {
4848
OptionResult(GameRepo game id) { game =>
4949
Ok.chunked(Enumerator.outputStream(env.pngExport(game))).withHeaders(
5050
CONTENT_TYPE -> "image/png",
@@ -53,10 +53,15 @@ object Export extends LilaController {
5353
}
5454
}
5555

56-
private def NotForBots(result: => Fu[Result])(implicit ctx: lila.api.Context) =
56+
private def OnlyHumans(result: => Fu[Result])(implicit ctx: lila.api.Context) =
5757
if (HTTPRequest isBot ctx.req) fuccess(NotFound)
5858
else result
5959

60+
private def OnlyHumansAndFacebook(result: => Fu[Result])(implicit ctx: lila.api.Context) =
61+
if (HTTPRequest isFacebookBot ctx.req) result
62+
else if (HTTPRequest isBot ctx.req) fuccess(NotFound)
63+
else result
64+
6065
private def gameOpening(game: GameModel) =
6166
if (game.fromPosition || game.variant.exotic) none
6267
else chess.OpeningExplorer openingOf game.pgnMoves

modules/common/src/main/HTTPRequest.scala

+5-1
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@ object HTTPRequest {
2424
def sid(req: RequestHeader): Option[String] = req.session get "sid"
2525

2626
private val isBotPattern =
27-
"""(?i).*(googlebot|googlebot-mobile|googlebot-image|mediapartners-google|bingbot|slurp|java|wget|curl|commons-httpclient|python-urllib|libwww|httpunit|nutch|phpcrawl|msnbot|adidxbot|blekkobot|teoma|ia_archiver|gingercrawler|webmon|httrack|webcrawler|fast-webcrawler|fastenterprisecrawler|convera|biglotron|grub.org|usinenouvellecrawler|antibot|netresearchserver|speedy|fluffy|jyxobot|bibnum.bnf|findlink|exabot|gigabot|msrbot|seekbot|ngbot|panscient|yacybot|aisearchbot|ioi|ips-agent|tagoobot|mj12bot|dotbot|woriobot|yanga|buzzbot|mlbot|yandex|purebot|lingueebot|voyager|cyberpatrol|voilabot|baiduspider|citeseerxbot|spbot|twengabot|postrank|turnitinbot|scribdbot|page2rss|sitebot|linkdex|ezooms|dotbot|mail.ru|discobot|heritrix|findthatfile|europarchive.org|nerdbynature.bot|sistrixcrawler|ahrefsbot|aboundex|domaincrawler|wbsearchbot|summify|ccbot|edisterbot|seznambot|ec2linkfinder|gslfbot|aihitbot|intelium_bot|facebookexternalhit|yeti|retrevopageanalyzer|lb-spider|sogou|lssbot|careerbot|wotbox|wocbot|ichiro|duckduckbot|lssrocketcrawler|drupact|webcompanycrawler|acoonbot|openindexspider|gnamgnamspider|web-archive-net.com.bot|backlinkcrawler|coccoc|integromedb|contentcrawlerspider|toplistbot|seokicks-robot|it2media-domain-crawler|ip-web-crawler.com|siteexplorer.info|elisabot|proximic|changedetection|blexbot|arabot|wesee:search|niki-bot|crystalsemanticsbot|rogerbot|360spider|psbot|interfaxscanbot|lipperheyseoservice|ccmetadatascaper|g00g1e.net|grapeshotcrawler|urlappendbot|brainobot|fr-crawler|binlar|simplecrawler|simplecrawler|livelapbot|twitterbot|cxensebot|smtbot).*""".r.pattern
27+
"""(?i).*(googlebot|googlebot-mobile|googlebot-image|mediapartners-google|bingbot|slurp|java|wget|curl|commons-httpclient|python-urllib|libwww|httpunit|nutch|phpcrawl|msnbot|adidxbot|blekkobot|teoma|ia_archiver|gingercrawler|webmon|httrack|webcrawler|fast-webcrawler|fastenterprisecrawler|convera|biglotron|grub.org|usinenouvellecrawler|antibot|netresearchserver|speedy|fluffy|jyxobot|bibnum.bnf|findlink|exabot|gigabot|msrbot|seekbot|ngbot|panscient|yacybot|aisearchbot|ioi|ips-agent|tagoobot|mj12bot|dotbot|woriobot|yanga|buzzbot|mlbot|yandex|purebot|lingueebot|""" +
28+
"""voyager|cyberpatrol|voilabot|baiduspider|citeseerxbot|spbot|twengabot|postrank|turnitinbot|scribdbot|page2rss|sitebot|linkdex|ezooms|dotbot|mail.ru|discobot|heritrix|findthatfile|europarchive.org|nerdbynature.bot|sistrixcrawler|ahrefsbot|aboundex|domaincrawler|wbsearchbot|summify|ccbot|edisterbot|seznambot|ec2linkfinder|gslfbot|aihitbot|intelium_bot|yeti|retrevopageanalyzer|lb-spider|sogou|lssbot|careerbot|wotbox|wocbot|ichiro|duckduckbot|lssrocketcrawler|drupact|webcompanycrawler|acoonbot|openindexspider|gnamgnamspider|web-archive-net.com.bot|backlinkcrawler|""" +
29+
"""coccoc|integromedb|contentcrawlerspider|toplistbot|seokicks-robot|it2media-domain-crawler|ip-web-crawler.com|siteexplorer.info|elisabot|proximic|changedetection|blexbot|arabot|wesee:search|niki-bot|crystalsemanticsbot|rogerbot|360spider|psbot|interfaxscanbot|lipperheyseoservice|ccmetadatascaper|g00g1e.net|grapeshotcrawler|urlappendbot|brainobot|fr-crawler|binlar|simplecrawler|simplecrawler|livelapbot|twitterbot|cxensebot|smtbot|facebookexternalhit).*""".r.pattern
2830

2931
def isBot(req: RequestHeader): Boolean = userAgent(req) ?? { ua =>
3032
isBotPattern.matcher(ua).matches
3133
}
34+
35+
def isFacebookBot(req: RequestHeader) = req.userAgent ?? (_ contains "facebookexternalhit")
3236
}

0 commit comments

Comments
 (0)