Skip to content

Commit

Permalink
Merge branch 'master' into insufficient-material-draw-claims
Browse files Browse the repository at this point in the history
  • Loading branch information
johndoknjas authored Feb 16, 2025
2 parents 7431213 + 725d841 commit 03d038e
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 51 deletions.
25 changes: 14 additions & 11 deletions app/controllers/Account.scala
Original file line number Diff line number Diff line change
Expand Up @@ -142,13 +142,12 @@ final class Account(
refreshSessionId(Redirect(routes.Account.passwd).flashSuccess)
}

private def refreshSessionId(result: Result)(using ctx: Context, me: Me): Fu[Result] =
(env.security.store.closeAllSessionsOf(me) >>
env.push.webSubscriptionApi.unsubscribeByUser(me) >>
env.push.unregisterDevices(me) >>
env.security.api.saveAuthentication(me, ctx.mobileApiVersion)).map { sessionId =>
result.withCookies(env.security.lilaCookie.session(env.security.api.sessionIdKey, sessionId))
}
private def refreshSessionId(result: Result)(using ctx: Context, me: Me): Fu[Result] = for
_ <- env.security.store.closeAllSessionsOf(me)
_ <- env.push.webSubscriptionApi.unsubscribeByUser(me)
_ <- env.push.unregisterDevices(me)
sessionId <- env.security.api.saveAuthentication(me, ctx.mobileApiVersion)
yield result.withCookies(env.security.lilaCookie.session(env.security.api.sessionIdKey, sessionId))

private def emailForm(using me: Me) =
env.user.repo.email(me).flatMap(env.security.forms.changeEmail)
Expand Down Expand Up @@ -181,15 +180,17 @@ final class Account(

def emailConfirm(token: String) = Open:
Found(env.security.emailChange.confirm(token)): (user, prevEmail) =>
(prevEmail.exists(_.isNoReply).so(env.clas.api.student.release(user))) >>
auth.authenticateUser(
for
_ <- prevEmail.exists(_.isNoReply).so(env.clas.api.student.release(user))
res <- auth.authenticateUser(
user,
remember = true,
result =
if prevEmail.exists(_.isNoReply)
then Some(_ => Redirect(routes.User.show(user.username)).flashSuccess)
else Some(_ => Redirect(routes.Account.email).flashSuccess)
)
yield res

def emailConfirmHelp = OpenBody:
import lila.security.EmailConfirm.Help.*
Expand Down Expand Up @@ -329,8 +330,10 @@ final class Account(
if sessionId == "all"
then refreshSessionId(Redirect(routes.Account.security).flashSuccess)
else
(env.security.store.closeUserAndSessionId(me, sessionId) >>
env.push.webSubscriptionApi.unsubscribeBySession(sessionId)).inject(NoContent)
for
_ <- env.security.store.closeUserAndSessionId(me, sessionId)
_ <- env.push.webSubscriptionApi.unsubscribeBySession(sessionId)
yield NoContent
}

private def renderReopen(form: Option[Form[Reopen]], msg: Option[String])(using Context) =
Expand Down
3 changes: 1 addition & 2 deletions app/controllers/Auth.scala
Original file line number Diff line number Diff line change
Expand Up @@ -286,13 +286,12 @@ final class Auth(
private def redirectNewUser(user: UserModel)(using Context) =
api
.saveAuthentication(user.id, ctx.mobileApiVersion)
.flatMap { sessionId =>
.flatMap: sessionId =>
negotiate(
Redirect(getReferrerOption | routes.User.show(user.username).url)
.flashSuccess("Welcome! Your account is now active."),
mobileUserOk(user, sessionId)
).map(authenticateCookie(sessionId, remember = true))
}
.recoverWith(authRecovery)

def setFingerPrint(fp: String, ms: Int) = Auth { ctx ?=> me ?=>
Expand Down
2 changes: 1 addition & 1 deletion modules/common/src/main/HTTPRequest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ object HTTPRequest:

private val crawlerMatcher = UaMatcher:
// spiders/crawlers
"""Googlebot|GoogleOther|AdsBot|Google-Read-Aloud|bingbot|BingPreview|facebookexternalhit|meta-externalagent|SemrushBot|AhrefsBot|PetalBot|Applebot|YandexBot|YandexAdNet|YandexImages|Twitterbot|Baiduspider|Amazonbot|Bytespider|yacybot|ImagesiftBot|ChatGLM-Spider|YisouSpider|Yeti/""" +
"""Googlebot|GoogleOther|AdsBot|Google-Read-Aloud|bingbot|BingPreview|facebookexternalhit|meta-externalagent|Discordbot|SemrushBot|AhrefsBot|PetalBot|Applebot|YandexBot|YandexAdNet|YandexImages|Twitterbot|Baiduspider|Amazonbot|Bytespider|yacybot|ImagesiftBot|ChatGLM-Spider|YisouSpider|Yeti/""" +
// http libs
"""|HeadlessChrome|okhttp|axios|undici|wget|curl|python-requests|aiohttp|commons-httpclient|python-urllib|python-httpx|Nessus|imroc/req"""

Expand Down
16 changes: 8 additions & 8 deletions modules/security/src/main/SecurityApi.scala
Original file line number Diff line number Diff line change
Expand Up @@ -113,20 +113,20 @@ final class SecurityApi(
userRepo.mustConfirmEmail(userId).flatMap {
if _ then fufail(SecurityApi.MustConfirmEmail(userId))
else
ip2proxy(HTTPRequest.ipAddress(req)).flatMap: proxy =>
val sessionId = SecureRandom.nextString(22)
proxy.name.foreach: p =>
logger.info(s"Proxy login $p $userId")
store
.save(sessionId, userId, req, apiVersion, up = true, fp = none, proxy = proxy)
.inject(sessionId)
for
proxy <- ip2proxy(HTTPRequest.ipAddress(req))
_ = proxy.name.foreach(p => logger.info(s"Proxy login $p $userId ${HTTPRequest.print(req)}"))
sessionId = SecureRandom.nextString(22)
_ <- store.save(sessionId, userId, req, apiVersion, up = true, fp = none, proxy = proxy)
yield sessionId
}

def saveSignup(userId: UserId, apiVersion: Option[ApiVersion], fp: Option[FingerPrint])(using
req: RequestHeader
): Funit =
val sessionId = SecureRandom.nextString(22)
store.save(s"SIG-$sessionId", userId, req, apiVersion, up = false, fp = fp)
ip2proxy(HTTPRequest.ipAddress(req)).flatMap: proxy =>
store.save(s"SIG-$sessionId", userId, req, apiVersion, up = false, fp = fp, proxy = proxy)

private type AppealOrUser = Either[AppealUser, FingerPrintedUser]
def restoreUser(req: RequestHeader): Fu[Option[AppealOrUser]] =
Expand Down
24 changes: 0 additions & 24 deletions modules/security/src/main/Store.scala
Original file line number Diff line number Diff line change
Expand Up @@ -94,30 +94,6 @@ final class Store(val coll: Coll, cacheApi: lila.memo.CacheApi)(using Executor):
)
.void

private[security] def save(
sessionId: String,
userId: UserId,
req: RequestHeader,
apiVersion: Option[ApiVersion],
up: Boolean,
fp: Option[FingerPrint],
sri: Option[Sri] = None
): Funit =
coll.insert
.one:
$doc(
"_id" -> sessionId,
"user" -> userId,
"ip" -> HTTPRequest.ipAddress(req),
"ua" -> HTTPRequest.userAgent(req).fold("?")(_.value),
"date" -> nowInstant,
"up" -> up,
"api" -> apiVersion,
"fp" -> fp.flatMap(lila.security.FingerHash.from).map(_.value).orElse(sri.map(_.value)),
"sri" -> sri
)
.void

def delete(sessionId: String): Funit =
for _ <- coll.update.one($id(sessionId), $set("up" -> false))
yield uncache(sessionId)
Expand Down
3 changes: 2 additions & 1 deletion ui/.build/src/tscWorker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ function watchEvent(err: ts.Diagnostic) {
}

function diagnostic(err: ts.Diagnostic) {
const text = typeof err.messageText === 'string' ? err.messageText : err.messageText.messageText;
let file, line, col;
if (err.file) {
file = err.file.fileName;
Expand All @@ -64,6 +65,6 @@ function diagnostic(err: ts.Diagnostic) {
parentPort?.postMessage({
type: 'error',
index,
data: { code: err.code, text: err.messageText, file, line, col },
data: { code: err.code, text, file, line, col },
});
}
8 changes: 4 additions & 4 deletions ui/chat/src/discussion.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ const whisperRegex = /^\/[wW](?:hisper)?\s/;

export default function (ctrl: ChatCtrl): Array<VNode | undefined> {
if (!ctrl.vm.enabled) return [];
const scrollCb = (vnode: VNode) => {
const scrollCb = (vnode: VNode, insert: boolean) => {
const el = vnode.elm as HTMLElement;
if (ctrl.data.lines.length > 5) {
const autoScroll = el.scrollTop > el.scrollHeight - el.clientHeight - 50;
const autoScroll = insert || el.scrollTop > el.scrollHeight - el.clientHeight - 100;
if (autoScroll) {
el.scrollTop = 999999;
setTimeout((_: any) => (el.scrollTop = 999999), 300);
Expand All @@ -44,9 +44,9 @@ export default function (ctrl: ChatCtrl): Array<VNode | undefined> {
$el.on('click', '.flag', (e: Event) =>
report(ctrl, (e.target as HTMLElement).parentNode as HTMLElement),
);
scrollCb(vnode);
scrollCb(vnode, true);
},
postpatch: (_, vnode) => scrollCb(vnode),
postpatch: (_, vnode) => scrollCb(vnode, false),
},
},
selectLines(ctrl).map(line => renderLine(ctrl, line)),
Expand Down

0 comments on commit 03d038e

Please sign in to comment.