* Trim whitespace from tokens before logging in
This change trims whitespace characters from the supplied token before it is used to log in. Users can encounter this accidentally if they read their token from a file that ends with a blank line.
Leading whitespace will make the token invalid. Trailing whitespace or \n (not \r\n) will also fail to log in. \r\n (CRLF) doesn't fail because of the line break style for http request headers.
* revert trimming api token
* add check for whitespace or newline characters to existing token validation
Checks to see if a token contains any illegal characters, like whitespace or a newline. If it is, throws an ArgumentException warning the user that their token may be invalid.
I considered only checking the first and last character, but given that a token containing whitespace or a newline wouldn't work either I figured this made sense.
* removed unused usings
These were leftover from a previous approach using an ImmutableHashSet
* add a util method for padding base64 strings if they are not of an expected length
* return the original string if it already contains padding, do not throw
* add tests for padding method, and for token that needs padding
* improve bot token validation by trying to decode user id from token
Try to decode the user id from the supplied bot token as a way of validating the token. If this should fail, indicate that the token is invalid.
* Update the tokenutils tests to pass the new validation checks
* Add test case for CheckBotTokenValidity method
* lint: clean up whitespace
* Add check for null or whitespace string, lint whitespace
* fix userid conversion
* Add hint to user to check that token is not an oauth client secret
* Catch exception that can be thrown by GetString
* Refactor token conversion logic into it's own testable method
* Update the minimum bot token length to 58 char
- Updates the minimum length of a bot token to be 58 characters. An older 58 char bot token was found by Moiph
- Makes this value an internal const instead of a magic number
* update the TokenUtils tests for 58 char min
* Add input validation for bot tokens based on their length
* Add token validation to BaseDiscordClient#LoginAsync
Adds a TokenUtils class which is used to validate that tokens are correct
* Revert changes to DiscordRestApiClient
* Add Unit tests to the TokenUtils class, fix a logic error that was caught by those tests
* Allow for API to throw exceptions
Moves the validation of tokens to be inside of LoginInternalAsync, and writes a Warning to the console when the supplied tokens are invalid