Internals that are not member of the internal group (e.g. Editor) but not Moderator+ should still be able to set the internal options on their uploads.
Also, replace all group->is_internal with internals->exists in app & views.
Just an initial portion for now fixing incorrect text and preventing future incorrect text. Eventually, I'd like to fix everything still listed under "ignoredWords" in cspell.json.
Many users often remove the announce url from uploaded torrents (since other tracker codebases are known to log urls of uploaded torrents to breach user accounts on other sites). This unfortunately causes the mime detection to sometimes (not all the time) fail preventing the user from uploading. Now that we're validating by file extension, it should still prevent the case of users accidentally uploading an unrelated file which was the main issue to be solved.
If a user has never installed a BitTorrent client, then their OS would have never registered the `application/x-bittorrent` mimetype. Upon upload, the browser does not sent this mimetype as a result, which causes the validation to fail.
Separate torrents into cruddy route names. Route model binding isn't possible due to the global scope on unapproved torrents. Use form requests. Simplify the controller flow where possible.