Commit graph

144 commits

Author SHA1 Message Date
Calvin Montgomery a90d88ad65 Fix race condition that might be causing errors 2017-08-12 13:30:24 -07:00
Calvin Montgomery d0c1e8cbd9 Change metric names to follow prometheus naming guide 2017-08-12 13:12:58 -07:00
Calvin Montgomery 04c9d48779 custom-media: implement queueing and playback changes 2017-08-08 20:35:17 -07:00
Calvin Montgomery 0b560f15a9 Add prometheus counter for changeMedia 2017-08-05 18:50:27 -07:00
Calvin Montgomery cb6cfc8455 Instrument some more metrics with prometheus 2017-08-02 21:24:44 -07:00
Calvin Montgomery 0118a6fb15 Refactor socket.io controller 2017-08-01 19:29:11 -07:00
Calvin Montgomery a8f1e48157 ffmpeg: remove bitrate and codec warning
Browsers which don't support CyTube's limited subset of
generally-supported codecs probably aren't worth warning about.

1Mbps is way too low of a threshold to warn about bandwidth, but even if
the threshold for warning were raised, it's probably still not that
useful.
2017-07-22 10:43:18 -07:00
Calvin Montgomery c152a19624 Ignore library cached metadata when queueing
The use of the channel library as a cache for metadata to avoid
re-requesting metadata for known media is an optimization that dates
back to 1.0.  However, it doesn't have any TTL, is prone to bugs, and is
of dubious value.

This commit ignores the results of the library check when queueing a new
video, opting to always re-request the metadata.  This fixes a few bugs:

  * Google Drive metadata being lost when storing in library
  * Streamable metadata being lost when storing in library
  * Videos in the channel library that are now unavailable on their
    source website being queueable and then failing to play (e.g. deleted
    YouTube videos).

In its place, a small fail-open check is left behind to emit metric
counters on how many queues would have been cache-hits, to provide
insight into whether a proper caching solution (i.e. one not tacked on
top of the library) would be worth pursuing or not.  This will be
removed eventually.
2017-07-15 14:41:37 -07:00
Calvin Montgomery b7ceee8ef4 Fix video sources being lost when playlist is saved 2017-07-15 14:12:32 -07:00
Calvin Montgomery 07179d6c83 Upgrade to jsli 2.0 2017-07-08 20:11:54 -07:00
Xaekai 18bf1b946b Minor fixes to afk stuff. 2017-06-29 19:04:49 -07:00
Xaekai 5f71c4d368 Send shadowmuted messages to anons
Resolves #689
2017-06-20 22:29:27 -07:00
Calvin Montgomery 53cee986c6 Resend userlist if rank changes meta visibility
Fixes #681.  Technically, resending the entire userlist is not
necessary; it would be sufficient to resent setUserMeta, but there's not
currently a bulk frame for that so sending the userlist is probably more
efficient.
2017-06-17 09:47:22 -07:00
Xaekai f89832a6d1 Gracefully allow script authors time to update their code 2017-06-15 22:09:09 -07:00
Xaekai df0fc769d9 Single source of truth for AFK
Resolves #678
2017-06-15 21:48:17 -07:00
Calvin Montgomery 22a9acfc90 Support proxying chat images via camo
Camo: https://github.com/atmos/camo.  This has a couple advantages over
just allowing images to be dumped as-is:

  - Prevents mixed-content warnings by allowing the server to proxy HTTP
    images to an HTTPS camo instance
  - Protects users' privacy by not exposing their browser directly to
    the image host
  - Allows the camo proxy to intercept and reject bad image sources
    (URLs that are not actually images, gigapixel-sized images likely to
    DoS users' browsers, etc.)

Whitelisting specific domains is supported for cases where the source is
known to be trustworthy.
2017-05-28 19:38:43 -07:00
Calvin Montgomery f968521936 Remove google drive refresh logic
No longer relevant since the video links are retrieved by the
userscript.
2017-05-28 18:35:13 -07:00
Calvin Montgomery 55b03d51d7 Fix setOptions for playlist_max_duration_per_user 2017-05-20 16:31:52 -07:00
Xaekai 9cfd97088e Some validation 2017-05-18 20:12:00 -07:00
Xaekai 8434d20826 Fix minor issues with emote rename 2017-05-17 09:50:47 -07:00
Xaekai 8e3ce4e1c3 Emote renaming
This allow emotes to be renamed in the same fashion the image URLs can be changed.
2017-05-16 10:08:53 -07:00
Calvin Montgomery 8d40c87dda Deprecate jwplayer and googleplus videos 2017-04-11 21:55:31 -07:00
Calvin Montgomery 8306d2d1b6 Refactor logging 2017-04-04 23:02:31 -07:00
Calvin Montgomery b1a328d2e0 Implement max total video time per user 2017-04-03 21:18:40 -07:00
Calvin Montgomery 7595faf11d Fix voteskip issue when there are no videos left 2017-03-21 20:04:06 -07:00
Calvin Montgomery 0613083eb0 Handle the case where no socket.io ack exists 2017-03-20 22:09:16 -07:00
Calvin Montgomery 9dc82ad444 Enforce stricter validation on polls 2017-03-20 21:37:32 -07:00
Calvin Montgomery 41a538c655 Fix playlist visibility: wait for U_HAS_CHANNEL_RANK instead of just login 2017-03-18 18:53:49 -07:00
Calvin Montgomery d8b9e3dab6 Merge pull request #648 from zeratul0/patch-1
Change fallback voteskip ratio to .5 from 0
2017-03-16 21:48:24 -07:00
zeratul0 88044e11d5 Error response -> template literal as requested 2017-03-16 23:34:38 -04:00
zeratul0 ab1358df36 Change skipratio fallback to error response 2017-03-16 18:35:42 -04:00
Calvin Montgomery a594b19745 Fix user join ban check for users with blank names (but clean IPs) 2017-03-15 23:44:03 -07:00
Calvin Montgomery f6500ff745 Fix emote regex due to sanitize-html changes 2017-03-14 21:36:44 -07:00
Calvin Montgomery 9239c2d465 Add channels.owner_last_seen column 2017-03-13 21:05:32 -07:00
Calvin Montgomery 8f266ccd44 Add channels.last_loaded column 2017-03-13 20:55:06 -07:00
zeratul0 d93e42a71c Change fallback voteskip ratio to .5 from 0
moderators might make a mistake changing the skip ratio, causing it to fall back to 0% and allowing users to "skiptrain" before it is fixed
2017-03-06 13:44:05 -05:00
Calvin Montgomery d65cf1beef Change sanitize-html back to the upstream module 2017-03-03 23:51:47 -08:00
Calvin Montgomery aea456436e Fix race condition for siteadmin rank socket frames 2017-03-03 23:34:27 -08:00
Calvin Montgomery d4db459ff9 Fix #647 2017-03-01 20:46:01 -08:00
Calvin Montgomery 5487d15bdf Add config option for mysql pool size, optimize restart login flood case 2017-02-02 23:05:50 -08:00
h2v4c 022fda3d1c Update voteskip.js
fixed an issue where the voteskip socket emit would send {0 count, 0 need} upon voteskip passing
2017-01-25 12:54:04 -06:00
Calvin Montgomery b0ff4d5ef0 Make delete from channel library a configurable permission 2017-01-23 21:16:39 -08:00
Calvin Montgomery bec55bc3d1 Add message for /clear 2017-01-23 21:06:42 -08:00
Calvin Montgomery 53d385f53e Copy CSS URL validation for JS 2016-12-13 22:22:25 -08:00
Calvin Montgomery 453ed607ba [http deprecation] enforce HTTPS for externalcss URLs 2016-12-10 23:23:57 -08:00
Calvin Montgomery e8d39850c5 Fix null check for youtube livestream check 2016-11-30 09:24:28 -08:00
Calvin Montgomery aa06884bd6 Ignore cached metadata for youtube livestreams 2016-11-17 23:00:06 -08:00
Calvin Montgomery 7c3f2d0a8b only set channel rank for non-guest 2016-10-06 23:22:02 -07:00
Calvin Montgomery ad4ee4bd02 Fix profile/rank for bot logins 2016-10-06 23:01:42 -07:00
Calvin Montgomery 99760b6989 Purge the awful refreshAccount logic
User.prototype.refreshAccount was responsible for multiple race
condition bugs as well as inefficient duplication of DB queries in an
attempt to correct such race conditions.

It has now been replaced by a more reasonable model:

  * Global user account information and aliases are fetched in parallel
    on socket connection
  * Channel rank is fetched when the user tries to join a channel
2016-10-03 23:12:22 -07:00
Calvin Montgomery e1120455b2 Cache channel ID for quicker loads/saves 2016-09-26 22:20:58 -07:00
Calvin Montgomery edff85dfb0 Fix User#inChannel for channels with passwords 2016-09-17 15:02:30 -07:00
Calvin Montgomery 1b1d2596f8 Change default for new account delays to 0 2016-09-14 22:06:00 -07:00
Calvin Montgomery 8b94c54d25 Fix bug causing channels to get stuck when DB is down 2016-08-31 21:32:42 -07:00
Calvin Montgomery e17dac58fd Add a temp bypass for initial rollout 2016-08-24 20:03:30 -07:00
Calvin Montgomery af6e958c49 Merge remote-tracking branch 'origin' into ip-session-age 2016-08-24 19:48:58 -07:00
calzoneman d9d385f85e Fix an age old log message missing whitespace 2016-08-10 23:10:44 -07:00
calzoneman 74cb1b3efc Implement time parsing/formatting for channel settings 2016-08-10 21:59:36 -07:00
calzoneman 8305c235eb Add initial channel setting for new account chat delay 2016-08-10 21:59:30 -07:00
calzoneman 701d470494 Add initial blocking of new users in chat 2016-08-10 21:59:18 -07:00
Xaekai 5896a1c0eb Add timestamps to polls.
Closes #562
2016-07-07 22:56:06 -07:00
calzoneman f75d40d278 Fix a bug with passwords for bot logins 2016-07-03 23:50:16 -07:00
calzoneman 312892e56b Short term additional fix for #583
The previous commits do not handle all of the edge cases of #583
appropriately.  This is a short term solution that will work, but is not
as efficient as it could be.  The whole refreshAccount function needs to
be reconsidered and replaced with a more sane way of handling atomic
updates to the user's account state.
2016-06-29 22:00:25 -07:00
calzoneman c70dc83504 Fix previous fix 2016-06-26 21:15:33 -07:00
calzoneman e9fdb1a7e5 Fix login race condition (#583) 2016-06-26 16:21:15 -07:00
calzoneman 6f56862307 Add vidme support (#568) 2016-06-25 17:09:48 -07:00
calzoneman 056b2a48ea Add throttling of usercount frames 2016-06-18 00:32:50 -07:00
calzoneman 75245e4d98 Include video ID in the progress bar to prevent false clears 2016-05-19 21:31:10 -07:00
calzoneman d61005e419 Add rel=noopener noreferrer to autogenerated links 2016-05-04 20:58:18 -07:00
calzoneman 0ee7f05213 Make polls more efficient
Instead of emitting frames to each individual socket, group them into
socket.io rooms of people who can see hidden poll results and people who
can't, then just do 2 broadcasts.
2016-04-02 11:57:26 -07:00
calzoneman 20538e328f Replace legacy emitter with EventEmitter prototype 2016-04-02 11:23:34 -07:00
calzoneman 9debebd4b9 /clean: error when no argument given 2016-03-28 22:31:35 -07:00
calzoneman 319c52911a Resolve #553 2016-03-23 23:04:58 -07:00
calzoneman 76ef8d6906 Improve performance of mass connects by broadcasting usercount 2016-02-15 21:35:59 -08:00
calzoneman b3c85e8534 Limit requestPlaylist to once per 60 seconds
If clients call it quickly in succession with large playlists, it can
cause node to get stuck stringifying socket.io frames and cause an out
of memory crash.
2016-02-06 19:40:50 -08:00
calzoneman ba54848db5 mediarefresher: fix memory leak from dangling timers 2016-01-30 19:42:55 -08:00
calzoneman 1ac69709ee Minor fix to refcounter logic 2016-01-04 20:35:02 -08:00
calzoneman be4011cda1 Replace old ActiveLock system with a slightly better one
CyTube has been crashing recently due to things attempting to release
the reference after the channel was already closed (apparently the
uncaughtException handler isn't called for this?).  This newer
implementation keeps track of what is ref'ing and unref'ing it, so it
can log an error if it detects a discrepancy.

Also changed the server to not delete the refCounter field from the
channel when it's unloaded, so that should reduce the number of errors
stemming from it being null/undefined.
2015-12-25 17:07:25 -08:00
calzoneman 5a2ef2d24d Minor fixes for queueWarn 2015-12-20 22:35:24 -08:00
calzoneman b4e7ab2443 Don't save a channel if it hasn't loaded yet 2015-12-18 19:20:57 -08:00
calzoneman 6f654b16b8 Prevent crash due to activeLock being destroyed before callback 2015-12-13 00:22:18 -08:00
calzoneman 11d4c4ca62 Reject blank emote names and images 2015-12-05 18:52:39 -08:00
calzoneman 59468ec77c Add safeguard to prevent #539 2015-12-02 20:59:46 -08:00
Calvin Montgomery b241a210f3 Fix for uniqueness of IP range bans 2015-11-23 18:22:51 -08:00
OurFlagIsMined 4809a3db00 more than one Play click deleted a playlist item
If two people tried to play the same playlist item, before the playlist updated, it would delete instead of playing.
The same would also happen if the play button was double-clicked instead of single-clicked.
Also, the active item's play button functioned as a delete button.

Fully tested. Still removes the item (if it was added as temporary) when it finishes playing, or if the play button of a *different* item is clicked.
2015-10-25 19:52:34 -04:00
calzoneman 8d39daf942 Factor out resumeAutolead() 2015-10-16 20:32:25 -07:00
calzoneman 217ed115a3 Fix #513 2015-10-16 20:23:41 -07:00
Calvin Montgomery 9f4461a779 Merge pull request #507 from calzoneman/channel-store
Refactor channel storage to allow database store
2015-10-04 23:22:05 -07:00
calzoneman 2fe646ec03 Minor cleanup 2015-10-04 23:21:53 -07:00
calzoneman a16f885fbd Fix custom embed invalid tag message 2015-09-28 17:31:37 -07:00
calzoneman c5e73e156a channel/chat: don't allow users to unmute themselves 2015-09-26 19:54:20 -07:00
calzoneman 20dc871303 Use create-error for better error creation 2015-09-24 23:36:05 -07:00
calzoneman 5ec9c2b029 Start refactoring channel storage 2015-09-23 21:56:04 -07:00
calzoneman 0109a87e55 package: build with babel for ES2015 support
* Rename lib/ -> src/
* Add `postinstall` npm target for compiling src files to lib
* Add `build-watch` npm target for development with babel --watch
* Add `lib/` to .gitignore
* Add `source-map-support` module for babel-generated sourcemaps
2015-09-23 19:27:04 -07:00