From 7e6a08ad1d04fdb5f0f36aa5fb0e0f8d655b6f42 Mon Sep 17 00:00:00 2001 From: SirStendec Date: Sat, 21 Jul 2018 16:26:10 -0400 Subject: [PATCH] 4.0.0-rc8.2 * Fixed: Appearance of Twitch emotes in locally displayed `/me` messages in chat. * Fixed: Rendering of international usernames in Clips Chat. * Changed: Tag error reports with the current site. Fix the implementation of rate-limiting in the socket server to use data from the sealed request. Load a list of acceptable origins from the config file. --- socketserver/server/handlecore.go | 20 +++++++++++-------- socketserver/server/publisher.go | 11 +++++----- socketserver/server/types.go | 6 ++++++ src/main.js | 4 ++-- src/raven.js | 1 + src/sites/twitch-clips/modules/chat/line.jsx | 2 +- .../twitch-twilight/modules/chat/index.js | 2 +- src/sites/twitch-twilight/styles/chat.scss | 4 ++++ 8 files changed, 33 insertions(+), 17 deletions(-) diff --git a/socketserver/server/handlecore.go b/socketserver/server/handlecore.go index 26dc7477..2420b860 100644 --- a/socketserver/server/handlecore.go +++ b/socketserver/server/handlecore.go @@ -53,13 +53,6 @@ const AsyncResponseCommand Command = "_async" const defaultMinMemoryKB = 1024 * 24 -// DotTwitchDotTv is the .twitch.tv suffix. -const DotTwitchDotTv = ".twitch.tv" - -const dotCbenniDotCom = ".cbenni.com" - -var OriginRegexp = regexp.MustCompile("(" + DotTwitchDotTv + "|" + dotCbenniDotCom + ")" + "$") - // ResponseSuccess is a Reply ClientMessage with the MessageID not yet filled out. var ResponseSuccess = ClientMessage{Command: SuccessCommand} @@ -228,7 +221,18 @@ var SocketUpgrader = websocket.Upgrader{ ReadBufferSize: 160, WriteBufferSize: 1024, CheckOrigin: func(r *http.Request) bool { - return r.Header.Get("Origin") == "" || OriginRegexp.MatchString(r.Header.Get("Origin")) + origin := r.Header.Get("Origin") + if origin == "" || ! Configuration.UseOriginChecks { + return true + } + + for _, allowedOrigin := range Configuration.AllowedOrigins { + if strings.Contains(origin, allowedOrigin) { + return true + } + } + + return false }, } diff --git a/socketserver/server/publisher.go b/socketserver/server/publisher.go index ffde2727..76f022c2 100644 --- a/socketserver/server/publisher.go +++ b/socketserver/server/publisher.go @@ -140,13 +140,14 @@ func HTTPBackendDropBacklog(w http.ResponseWriter, r *http.Request) { } } -func rateLimitFromRequest(r *http.Request) (rate.Limiter, error) { - if r.FormValue("rateCount") != "" { - c, err := strconv.ParseInt(r.FormValue("rateCount"), 10, 32) +func rateLimitFromFormData(formData *url.Values) (rate.Limiter, error) { + rateCount := formData.get("rateCount") + if rateCount != "" { + c, err := strconv.ParseInt(rateCount, 10, 32) if err != nil { return nil, errors.Wrap(err, "rateCount") } - d, err := time.ParseDuration(r.FormValue("rateTime")) + d, err := time.ParseDuration(formData.get("rateTime")) if err != nil { return nil, errors.Wrap(err, "rateTime") } @@ -186,7 +187,7 @@ func HTTPBackendCachedPublish(w http.ResponseWriter, r *http.Request) { } expires = time.Unix(timeNum, 0) } - rl, err := rateLimitFromRequest(r) + rl, err := rateLimitFromFormData(formData) if err != nil { w.WriteHeader(422) fmt.Fprintf(w, "error parsing ratelimit: %v", err) diff --git a/socketserver/server/types.go b/socketserver/server/types.go index b4fae2af..ee156259 100644 --- a/socketserver/server/types.go +++ b/socketserver/server/types.go @@ -35,6 +35,12 @@ type ConfigFile struct { // Path to key file. SSLKeyFile string + // Origin Checking + UseOriginChecks bool + + // Allowed Origins + AllowedOrigins []string + // Nacl keys OurPrivateKey []byte OurPublicKey []byte diff --git a/src/main.js b/src/main.js index 81edc57a..e9833879 100644 --- a/src/main.js +++ b/src/main.js @@ -36,7 +36,7 @@ class FrankerFaceZ extends Module { this.log = new Logger(null, null, null, this.raven); this.core_log = this.log.get('core'); - this.log.info(`FrankerFaceZ v${VER} (build ${VER.build})`); + this.log.info(`FrankerFaceZ v${VER} (build ${VER.build}${VER.commit ? ` - commit ${VER.commit}` : ''})`); // ======================================================================== @@ -100,7 +100,7 @@ class FrankerFaceZ extends Module { FrankerFaceZ.Logger = Logger; const VER = FrankerFaceZ.version_info = { - major: 4, minor: 0, revision: 0, extra: '-rc8.1', + major: 4, minor: 0, revision: 0, extra: '-rc8.2', commit: __git_commit__, build: __webpack_hash__, toString: () => diff --git a/src/raven.js b/src/raven.js index d7f2b79e..89a55cf6 100644 --- a/src/raven.js +++ b/src/raven.js @@ -276,6 +276,7 @@ export default class RavenLogger extends Module { const core = this.site.getCore(), out = {}; + out.flavor = this.site.constructor.name; out.build = __webpack_hash__; out.git_commit = __git_commit__; diff --git a/src/sites/twitch-clips/modules/chat/line.jsx b/src/sites/twitch-clips/modules/chat/line.jsx index 9d6c8c45..c2a14702 100644 --- a/src/sites/twitch-clips/modules/chat/line.jsx +++ b/src/sites/twitch-clips/modules/chat/line.jsx @@ -116,7 +116,7 @@ export default class Line extends Module { id: author.id, login: author.login, displayName: author.displayName, - isIntl: author.name && author.displayName && author.displayName.trim().toLowerCase() !== author.name, + isIntl: author.login && author.displayName && author.displayName.trim().toLowerCase() !== author.login, type: 'user' }, roomLogin: room && room.login, diff --git a/src/sites/twitch-twilight/modules/chat/index.js b/src/sites/twitch-twilight/modules/chat/index.js index c3c9dcfe..148f8ee1 100644 --- a/src/sites/twitch-twilight/modules/chat/index.js +++ b/src/sites/twitch-twilight/modules/chat/index.js @@ -750,7 +750,7 @@ export default class ChatHook extends Module { if ( e && e.sentByCurrentUser ) { try { e.message.user.emotes = findEmotes( - e.message.body.slice(8, -1), + e.message.body, i.ffzGetEmotes() ); diff --git a/src/sites/twitch-twilight/styles/chat.scss b/src/sites/twitch-twilight/styles/chat.scss index c91c661c..3973f35a 100644 --- a/src/sites/twitch-twilight/styles/chat.scss +++ b/src/sites/twitch-twilight/styles/chat.scss @@ -21,6 +21,10 @@ margin-bottom: 0 !important; } +.chat-settings__content div[data-test-selector="high-contrast-selector"] { + display: none; +} + .autocomplete-balloon { .autocomplete-balloon__item { > .tw-flex {