Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/controllers/Challenge.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ package controllers

import play.api.libs.json.Json
import play.api.mvc.{ RequestHeader, Result }
import scalalib.net.Bearer

import lila.app.{ *, given }
import lila.challenge.{ Challenge as ChallengeModel, Direction }
import lila.core.id.ChallengeId
import lila.core.net.Bearer
import lila.game.AnonCookie
import lila.oauth.{ EndpointScopes, OAuthScope, OAuthServer }
import lila.setup.ApiConfig
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/OAuth.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ package controllers
import play.api.libs.json.{ JsNull, JsObject, JsValue, Json }
import play.api.mvc.*
import scalalib.ThreadLocalRandom
import scalalib.net.Bearer
import scalatags.Text.all.stringFrag
import cats.mtl.Handle.*

import lila.app.*
import lila.common.HTTPRequest
import lila.common.Json.given
import lila.core.net.Bearer
import lila.oauth.{ AccessTokenRequest, AuthorizationRequest, OAuthScopes }

import Api.ApiResult
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/Opening.scala
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package controllers

import play.api.mvc.*
import scalalib.net.Crawler

import lila.app.{ *, given }
import lila.common.HTTPRequest
import lila.core.net.Crawler
import lila.core.security.IsProxy
import lila.opening.OpeningQuery.queryFromUrl
import lila.security.UserAgentParser
Expand Down
6 changes: 3 additions & 3 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,8 @@ lazy val modules = Seq(
insight, evaluation, storm,
// level 7
// everything else is free from deps; do the big ones first
relay, security, tournament, plan, round,
swiss, insight, fishnet, tutor, mod, challenge, web,
relay, tutor, security, tournament, plan, round,
swiss, insight, fishnet, mod, challenge, web,
team, forum, streamer, simul, activity, msg, ublog,
notifyModule, clas, perfStat, opening, timeline,
setup, video, fide, title, push,
Expand Down Expand Up @@ -376,7 +376,7 @@ lazy val study = module("study",
).dependsOn(common % "test->test")

lazy val relay = module("relay",
Seq(study, game, report),
Seq(study, game),
Seq(chess.tiebreak) ++ tests.bundle
).dependsOn(coreI18n % "test->test")

Expand Down
2 changes: 1 addition & 1 deletion modules/api/src/main/EventStream.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import akka.actor.*
import akka.stream.scaladsl.*
import play.api.i18n.Lang
import play.api.libs.json.*
import scalalib.net.Bearer

import lila.challenge.{ Challenge, NegativeEvent }
import lila.common.Bus
Expand All @@ -13,7 +14,6 @@ import lila.core.game.{ FinishGame, StartGame }
import lila.game.Rematches
import lila.user.{ LightUserApi, Me, UserRepo }
import lila.bot.OnlineApiUsers.*
import lila.core.net.Bearer

final class EventStream(
challengeJsonView: lila.challenge.JsonView,
Expand Down
5 changes: 3 additions & 2 deletions modules/api/src/main/GameStreamByOauthOrigin.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ import akka.stream.scaladsl.*
import play.api.libs.json.*
import play.api.mvc.RequestHeader
import bloomfilter.mutable.BloomFilter
import scalalib.net.UserAgent

import lila.common.{ Bus, HTTPRequest }
import lila.core.game.{ FinishGame, Game, StartGame, WithInitialFen }
import lila.core.net.{ UserAgent, Origin }
import lila.core.net.Origin
import lila.oauth.AccessToken

final class GameStreamByOauthOrigin(
Expand All @@ -19,7 +20,7 @@ final class GameStreamByOauthOrigin(
private val streamUserId = UserId.t3
private val origin = Origin("https://auth.taketaketake.com")
private val estimatedCount = 50_000
private val falsePositiveRate = 0.0002 // 0.02% false positives
private val falsePositiveRate = 0.0005 // 0.05% false positives
private var population = 0

private def mon = lila.mon.game.streamByOauthOrigin
Expand Down
2 changes: 1 addition & 1 deletion modules/api/src/main/MobileApi.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import play.api.libs.json.{ Json, JsObject }
import play.api.i18n.Lang
import play.api.mvc.RequestHeader
import scalalib.data.Preload
import scalalib.net.UserAgent

import lila.common.Json.given
import lila.core.i18n.Translate
import lila.core.user.KidMode
import lila.core.net.UserAgent
import lila.oauth.TokenScopes
import lila.core.perf.UserWithPerfs

Expand Down
4 changes: 2 additions & 2 deletions modules/bot/src/main/GameStateStream.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ import akka.stream.scaladsl.*
import play.api.i18n.Lang
import play.api.libs.json.*
import scalalib.ThreadLocalRandom
import scalalib.net.UserAgent

import lila.chat.{ Chat, UserLine }
import lila.common.Bus
import lila.common.actorBus.*
import lila.core.game.{ AbortedBy, FinishGame, WithInitialFen }
import lila.core.round.{ Tell, RoundBus }
import lila.core.user.KidMode
import lila.core.net.UserAgent
import lila.game.actorApi.{
BoardDrawOffer,
BoardGone,
Expand All @@ -35,7 +35,7 @@ final class GameStateStream(

def apply(init: WithInitialFen, as: Color)(using
lang: Lang,
ua: lila.core.net.UserAgent,
ua: UserAgent,
me: Me
): Source[Option[JsObject], ?] =

Expand Down
2 changes: 1 addition & 1 deletion modules/challenge/src/main/ChallengeBulkSetup.scala
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import play.api.data.Forms.*
import play.api.libs.json.Json
import scalalib.ThreadLocalRandom
import scalalib.model.Days
import scalalib.net.Bearer

import lila.core.data.Template
import lila.core.game.GameRule
import lila.core.net.Bearer
import lila.game.IdGenerator
import lila.oauth.{ EndpointScopes, OAuthScope, OAuthServer }
import lila.common.Form.into
Expand Down
5 changes: 3 additions & 2 deletions modules/common/src/main/HTTPRequest.scala
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package lila.common

import scala.util.matching.Regex

import play.api.http.HeaderNames
import play.api.mvc.RequestHeader
import play.api.routing.Router

import scala.util.matching.Regex
import scalalib.net.{ UserAgent, Crawler, Bearer }

import lila.common.Form.trueish
import lila.core.net.*
Expand Down
20 changes: 1 addition & 19 deletions modules/core/src/main/email.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package lila.core

import scalalib.newtypes.OpaqueString

import lila.core.net.Domain
import scalalib.net.Domain

object email:

Expand Down Expand Up @@ -36,27 +35,10 @@ object email:
def nameAndDomain: Option[(String, Domain)] = domain.map: d =>
e.takeWhile(_ != '@') -> d

def similarTo(other: EmailAddress) =
e.normalize.eliminateDomainAlias == other.normalize.eliminateDomainAlias

def isNoReply = e.startsWith("noreply.") && e.endsWith("@lichess.org")
def isBlank = e.startsWith("noreply.blanked.")
def isSendable = !e.isNoReply && !e.isBlank

def looksLikeFakeEmail =
e.domain.map(_.lower).exists(EmailAddress.gmailDomains.contains) && {
val dots = e.username.count('.' == _)
dots >= 3 || (dots == 2 && """\d\.\d""".r.unanchored.matches(e.username))
}

def eliminateDomainAlias: EmailAddress =
e.nameAndDomain.fold(e): (name, domain) =>
val newDomain =
if yandexDomains.contains(domain.lower) then "yandex.com"
else if gmailDomains.contains(domain.lower) then "gmail.com"
else domain
s"$name@$newDomain"

private val regex =
"""(?i)^[a-z0-9.!#$&'+/=?^_`{|}~\-]+@[a-z0-9](?:[a-z0-9-]{0,62}+(?<!-))?(?:\.[a-z0-9](?:[a-z0-9-]{0,62}+(?<!-))?)*$""".r

Expand Down
2 changes: 1 addition & 1 deletion modules/core/src/main/game/misc.scala
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ trait GameApi:
def computeMoveTimes(g: Game, color: Color): Option[List[Centis]]
def analysable(g: Game): Boolean
def nbPlaying(userId: UserId): Fu[Int]
def anonCookieJson(pov: lila.core.game.Pov): Option[JsObject]
def anonCookieJson(pov: Pov): Option[JsObject]

abstract class GameRepo(val coll: BSONCollection):
given gameHandler: BSONDocumentHandler[Game]
Expand Down
6 changes: 0 additions & 6 deletions modules/core/src/main/misc.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,6 @@ import lila.core.id.{ GameId, ClasId }
import lila.core.userId.*
import lila.core.user.Me

trait AtInstant[A]:
def apply(a: A): Instant
extension (a: A) inline def atInstant: Instant = apply(a)
object AtInstant:
given atInstantOrdering: [A: AtInstant] => Ordering[A] = Ordering.by[A, Instant](_.atInstant)

package streamer:
case class StreamStart(userId: UserId, streamerName: String)

Expand Down
29 changes: 1 addition & 28 deletions modules/core/src/main/net.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import io.mola.galimatias.URL
import io.mola.galimatias.IPv4Address.parseIPv4Address
import io.mola.galimatias.IPv6Address.parseIPv6Address
import scalalib.SecureRandom
import scalalib.net.IpAddressStr

import java.net.InetAddress
import scala.util.Try
Expand Down Expand Up @@ -32,29 +33,6 @@ object net:
def from(str: String): Option[IpAddress] = parse(str).toOption
def unchecked(str: String): IpAddress = parse(str).get

opaque type IpAddressStr = String
object IpAddressStr extends OpaqueString[IpAddressStr]

opaque type Domain = String
object Domain extends OpaqueString[Domain]:
extension (a: Domain) def lower = Domain.Lower(a.value.toLowerCase)

// https://stackoverflow.com/a/26987741/1744715
private val regex = """(?i)^_?[a-z0-9-]{1,63}+(?:\._?[a-z0-9-]{1,63}+)*$""".r
def isValid(str: String) = str.contains('.') && regex.matches(str)
def from(str: String): Option[Domain] = isValid(str).option(Domain(str))
def unsafe(str: String): Domain = Domain(str)

opaque type Lower = String
object Lower extends OpaqueString[Lower]

opaque type UserAgent = String
object UserAgent extends OpaqueString[UserAgent]:
val zero: UserAgent = ""

opaque type Crawler = Boolean
object Crawler extends YesNo[Crawler]

case class LichessMobileUa(
version: String,
userId: Option[UserId],
Expand Down Expand Up @@ -90,11 +68,6 @@ object net:
private def random = AssetVersion(SecureRandom.nextString(6))
case class Changed(version: AssetVersion)

opaque type Bearer = String
object Bearer extends OpaqueString[Bearer]:
def random() = Bearer(s"lio_${SecureRandom.nextString(32)}")
def randomPersonal() = Bearer(s"lip_${SecureRandom.nextString(20)}")

opaque type Origin = String
object Origin extends OpaqueString[Origin]:
def from(url: URL): Origin =
Expand Down
1 change: 0 additions & 1 deletion modules/core/src/main/user.scala
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import lila.core.email.*
import lila.core.id.Flair
import lila.core.perf.{ KeyedPerf, Perf, PerfKey, UserPerfs, UserWithPerfs }
import lila.core.userId.*
import lila.core.misc.AtInstant
import lila.core.plan.{ PatronMonths, PatronTier, PatronColorChoice }
import lila.core.rating.UserRankMap

Expand Down
11 changes: 0 additions & 11 deletions modules/core/src/test/EmailTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,6 @@ class EmailTest extends munit.FunSuite:
NormalizedEmailAddress("[email protected]")
)

test("not similar emails"):
assert(!EmailAddress("[email protected]").similarTo(EmailAddress("[email protected]")))
assert(!EmailAddress("[email protected]").similarTo(EmailAddress("[email protected]")))
assert(!EmailAddress("[email protected]").similarTo(EmailAddress("[email protected]")))

test("similar emails"):
assert(EmailAddress("[email protected]").similarTo(EmailAddress("[email protected]")))
assert(EmailAddress("[email protected]").similarTo(EmailAddress("[email protected]")))
assert(EmailAddress("[email protected]").similarTo(EmailAddress("[email protected]")))
assert(EmailAddress("[email protected]").similarTo(EmailAddress("[email protected]")))

test("lowercase emails"):
assertEquals(
EmailAddress("[email protected]").normalize,
Expand Down
3 changes: 2 additions & 1 deletion modules/memo/src/main/ViewerCount.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ package lila.memo

import play.api.mvc.RequestHeader
import bloomfilter.mutable.BloomFilter
import lila.core.net.UserAgent
import scalalib.net.UserAgent

import lila.core.userId.UserId
import lila.core.config.CollName
import lila.db.dsl.*
Expand Down
1 change: 0 additions & 1 deletion modules/mod/src/main/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ export lila.common.extensions.*
export lila.core.userId.ModId
import lila.core.perf.UserWithPerfs
import lila.core.perm.{ Granter, Permission }
import lila.core.misc.AtInstant

private val logger = lila.log("mod")

Expand Down
2 changes: 1 addition & 1 deletion modules/mon/src/main/mon.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import kamon.metric.Timer
import kamon.tag.TagSet
import kamon.Kamon.{ timer, gauge, counter, histogram }
import chess.variant.Variant
import scalalib.net.UserAgent

import lila.core.id.*
import lila.core.net.*
import lila.core.userId.{ UserId, UserName }
import lila.core.perf.PerfKey

Expand Down
3 changes: 2 additions & 1 deletion modules/oauth/src/main/AccessToken.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ package lila.oauth
import reactivemongo.api.bson.*
import reactivemongo.api.bson.Macros.Annotations.Key
import com.roundeights.hasher.Algo
import scalalib.net.{ Bearer, UserAgent }

import lila.core.net.{ Bearer, UserAgent, Origin }
import lila.core.net.Origin
import lila.core.misc.oauth.AccessTokenId

case class AccessToken(
Expand Down
3 changes: 2 additions & 1 deletion modules/oauth/src/main/AccessTokenApi.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ import play.api.libs.json.*
import reactivemongo.api.bson.*
import reactivemongo.akkastream.cursorProducer
import akka.stream.scaladsl.Source
import scalalib.net.{ Bearer, UserAgent }

import lila.common.Json.given
import lila.core.misc.oauth.{ AccessTokenId, TokenRevoke }
import lila.core.net.{ Bearer, UserAgent, Origin }
import lila.core.net.Origin
import lila.db.dsl.{ *, given }

final class AccessTokenApi(
Expand Down
2 changes: 1 addition & 1 deletion modules/oauth/src/main/OAuthServer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package lila.oauth

import com.softwaremill.tagging.*
import play.api.mvc.{ RequestHeader, Result }
import scalalib.net.{ Bearer, UserAgent }

import lila.common.HTTPRequest
import lila.core.net.{ Bearer, UserAgent }
import lila.memo.SettingStore

final class OAuthServer(
Expand Down
3 changes: 2 additions & 1 deletion modules/oauth/src/main/OAuthSignedClient.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package lila.oauth

import play.api.Configuration
import com.roundeights.hasher.Algo
import scalalib.net.Bearer

import lila.oauth.Protocol.{ ClientId, RedirectUri }
import lila.common.config.given
import lila.core.net.{ Bearer, Origin, ValidReferrer }
import lila.core.net.{ Origin, ValidReferrer }

case class OAuthSignedClient(
clientId: ClientId,
Expand Down
2 changes: 1 addition & 1 deletion modules/opening/src/main/OpeningApi.scala
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package lila.opening

import play.api.mvc.RequestHeader
import scalalib.net.Crawler

import lila.core.game.{ GameRepo, PgnDump }
import lila.core.net.Crawler
import lila.core.security.IsProxy
import lila.memo.{ CacheApi, RateLimit }

Expand Down
2 changes: 1 addition & 1 deletion modules/opening/src/main/OpeningExplorer.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import play.api.libs.json.{ JsObject, JsValue, Json, Reads }
import play.api.libs.ws.JsonBodyReadables.*
import play.api.libs.ws.StandaloneWSClient
import scala.util.{ Failure, Success, Try }
import scalalib.net.Crawler

import lila.core.net.Crawler
import lila.core.config.Secret
import lila.mon.extensions.*

Expand Down
Loading
Loading