diff --git a/src/Discord.Net.Core/Utils/TokenUtils.cs b/src/Discord.Net.Core/Utils/TokenUtils.cs index bfc915252..8fa846267 100644 --- a/src/Discord.Net.Core/Utils/TokenUtils.cs +++ b/src/Discord.Net.Core/Utils/TokenUtils.cs @@ -7,6 +7,15 @@ namespace Discord /// public static class TokenUtils { + /// + /// The minimum length of a Bot token. + /// + /// + /// This value was determined by comparing against the examples in the Discord + /// documentation, and pre-existing tokens. + /// + internal const int MinBotTokenLength = 58; + /// /// Checks the validity of the supplied token of a specific type. /// @@ -29,11 +38,11 @@ namespace Discord // no validation is performed on Bearer tokens break; case TokenType.Bot: - // bot tokens are assumed to be at least 59 characters in length + // bot tokens are assumed to be at least 58 characters in length // this value was determined by referencing examples in the discord documentation, and by comparing with // pre-existing tokens - if (token.Length < 59) - throw new ArgumentException(message: "A Bot token must be at least 59 characters in length.", paramName: nameof(token)); + if (token.Length < MinBotTokenLength) + throw new ArgumentException(message: $"A Bot token must be at least {MinBotTokenLength} characters in length.", paramName: nameof(token)); break; default: // All unrecognized TokenTypes (including User tokens) are considered to be invalid. diff --git a/test/Discord.Net.Tests/Tests.TokenUtils.cs b/test/Discord.Net.Tests/Tests.TokenUtils.cs index dc5a93e34..8cebc649d 100644 --- a/test/Discord.Net.Tests/Tests.TokenUtils.cs +++ b/test/Discord.Net.Tests/Tests.TokenUtils.cs @@ -69,9 +69,12 @@ namespace Discord /// /// Tests the behavior of /// to see that valid Bot tokens do not throw Exceptions. - /// Valid Bot tokens can be strings of length 59 or above. + /// Valid Bot tokens can be strings of length 58 or above. /// [Theory] + // missing a single character from the end, 58 char. still should be valid + [InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKW")] + // 59 char token [InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKWs")] [InlineData("This appears to be completely invalid, however the current validation rules are not very strict.")] [InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKWss")] @@ -90,12 +93,12 @@ namespace Discord /// [Theory] [InlineData("This is invalid")] - // missing a single character from the end - [InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKW")] // bearer token [InlineData("6qrZcUqja7812RVdnEKjpzOL4CvHBFG")] // client secret [InlineData("937it3ow87i4ery69876wqire")] + // 57 char bot token + [InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kK")] public void TestBotTokenInvalidThrowsArgumentException(string token) { Assert.Throws(() => TokenUtils.ValidateToken(TokenType.Bot, token)); @@ -113,6 +116,7 @@ namespace Discord // TokenType.User [InlineData(0)] // out of range TokenType + [InlineData(-1)] [InlineData(4)] [InlineData(7)] public void TestUnrecognizedTokenType(int type)