- [permissions] Select from Anonymous, Guest, Registered, Leader, Moderator, Admin, Owner and Founder (instead of Anonymous, Guest, Registered, Moderator and Channel Admin) for better control.
- Add permissions for: view (and change) permissions, view logs, view (and change) javascript and view (and change) CSS.
- Add permission to clear chat.
- Log commands (i.e. /clear)
- Webm images in chat (whitelist)
- support hitbox.tv
- subtitles on google docs
- Investigate plausibility of using PCRE module
- Transition to signed cookies
- Add csrf tokens https://github.com/expressjs/csurf
- Refactor to make auth easier
- Replace shimlogin/shimlogout with AJAX socket ID auth
- Set up VideoJS
- Blocked on investigation of better flash option
- Implement IRC-style cloaking
- Move tor banning to per-channel option
- support google+ videos
- clean up startPlayback and video refreshing
- Add prompt for users to allow/deny scripts
- Save user preference
- Manage preferences in Options menu
- Merge library tables into one table with an indexed
channel
column - Merge rank tables into one table with an indexed
channel
column - Merge ban tables into one table with an indexed
channel
column - Add console command for deleting old channel tables
- Conversion testing on production DB
- Performance testing on production DB
Library
- Don't create library table on registration
- Don't attempt to drop library table on deletion of channel
- Add to library
- Get item from library
- Search library
- Delete from library
Ranks
- Don't create ranks table on registration
- Don't attempt to drop ranks table on deletion of channel
- Add owner rank to
channel_ranks
on channel registration - Look up user rank in channel
- Look up multiple user ranks at once
- Query all ranks from the channel
- Update a user's rank without overwriting
- Overwrite an existing rank
- Delete a rank (demote below mod)
Bans
- Creating a channel does not create any ban table
- Deleting a channel does not attempt to drop a ban table
- Adding a ban
- Testing if an IP is banned
- Testing if a name is banned
- Listing all bans
- Unban
- Figure out why duplicate entries are reported for conversion of feelingkeen and pouni rank tables -- It turns out these 2 channels have duplicate tables for different casings. Only one casing is actually used, so the wrong case can safely be dropped.
DROP TABLE chan_feelingkeen_ranks; DROP TABLE chan_feelingkeen_library; DROP TABLE chan_feelingkeen_bans;
DROP TABLE chan_pouni_ranks; DROP TABLE chan_pouni_library; DROP TABLE chan_pouni_bans;
- Test MySQL performance
- Fix merge notice appearing at the wrong time
- Fix db_version not being updated
- Merge FlashPlayer and RawVideoPlayer into FilePlayer which assumes HTML5 and falls back on flash
- Figure out which container/video stream types are supported by the flash player (and HTML5 browsers)
- Modify queue parser to detect file extensions of supported types and prompt for title input
- Implement a similar override to
jw:
to allow queueing of valid files with the wrong extension - Add serverside ffmpeg metadata parser using
fluent-ffmpeg
module - Add
queueWarn
for high bitrate videos (> 1000kbps?) - Add a note when queueing JWPlayer saying you should try file player first
- Look into the MOTD editor not being updated properly on MOTD change
- Make sure things that require database queries don't happen for unregistered channels
- Extra key: type - add some useful information to report back
- Make sure gdocs meta doesn't get saved in chandumps
- Transition from gdocs to gdocs causes the video player size to mess up
- Allegedly seeking with leader on gdocs doesn't work
- Make
findUserlistItem()
less hacky (request from admin in /r/Frozen) - Missing key currentTime for mediaUpdate -- cannot reproduce
- PMs don't work with capital letter users
- Check profile
- Allow google drive to be cached in library
Over the past year of development, the Channel
prototype has become a 3,000 line behemoth managing practically every aspect of channel operation. The object of this refactoring is to separate this functionality into smaller modules that can each load/save their own data from/to the JSON chandump, register socket event handlers when a user is accepted, reject a user's request to join, register chat commands, etc. This refactoring also makes it necessary to refactor the User
prototype to be compatible with this new API.
-
lib/channel/module.js
- Module prototype definition -
lib/channel/chat.js
- Chat module - chat muting
-
lib/channel/filters.js
- Chat filters module -
lib/channel/emotes.js
- Chat emotes module -
lib/channel/library.js
- Channel library module -
lib/channel/opts.js
- Channel options module -
lib/channel/customization.js
- Channel customization (CSS, JS, MOTD) module -
lib/channel/permissions.js
- Channel permissions module - Unregistered channel permissions
-
lib/channel/playlist.js
- Playlist and playback module - user playlists in playlist.js
-
lib/channel/accesscontrol.js
- Password protected channel join module -
lib/channel/kickban.js
- Kick/Ban module -
lib/channel/ranks.js
- Rank management module -
lib/channel/voteskip.ks
- Voteskip module - Channel log view
Typechecking incoming data from the wire has left socket handlers riddled with large prologues of if
statements checking for possibly bad data. I wrote a small library to typecheck JSON objects against a template, and I think using it (perhaps automatically with a special function for registering a type checking listener) would improve readability of the code.
- Clean up socket listeners with
json-typecheck
The playlist should automatically refresh Google Docs links
- Auto-refresh google docs links
Modules that are completed still need to be tested.
Things that are broken
- Set proper rank for non-global admins
- Anonymous users should not appear in the userlist
- Refresh media button does not work
- Filters/emotes
- AFK timer reset
- Kick old user on duplicate join
-
/ban
should kick the target - Editing channel permissions doesn't work
- Changing channel settings doesn't work
- Rank editor interface doesn't send proper message
- Fix
/rank
- [acp] Initialized ACP for undefined
- Guest seems broken
- queueing a youtube playlist triggered an error for activeLock on null
- Check if registering channels sets the rank right
- Check if login doesn't work right
As of CyTube 3.0, database columns for storing IP addresses have been expanded to allow storage of IPv6 addresses. Allowing IPv6 connections will require modifications to IP masking and banning functions.
-
IPv6 address masking
-
IPv6 address banning
-
Link multiple servers together
-
Cluster socket.io connections with that thing I found on reddit