fix: Update minimum Bot Token length to 58 char (#1204)
* 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
This commit is contained in:
committed by
Christopher F
parent
6f5693f486
commit
f6413bac59
@@ -7,6 +7,15 @@ namespace Discord
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static class TokenUtils
|
public static class TokenUtils
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The minimum length of a Bot token.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This value was determined by comparing against the examples in the Discord
|
||||||
|
/// documentation, and pre-existing tokens.
|
||||||
|
/// </remarks>
|
||||||
|
internal const int MinBotTokenLength = 58;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Checks the validity of the supplied token of a specific type.
|
/// Checks the validity of the supplied token of a specific type.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -29,11 +38,11 @@ namespace Discord
|
|||||||
// no validation is performed on Bearer tokens
|
// no validation is performed on Bearer tokens
|
||||||
break;
|
break;
|
||||||
case TokenType.Bot:
|
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
|
// this value was determined by referencing examples in the discord documentation, and by comparing with
|
||||||
// pre-existing tokens
|
// pre-existing tokens
|
||||||
if (token.Length < 59)
|
if (token.Length < MinBotTokenLength)
|
||||||
throw new ArgumentException(message: "A Bot token must be at least 59 characters in length.", paramName: nameof(token));
|
throw new ArgumentException(message: $"A Bot token must be at least {MinBotTokenLength} characters in length.", paramName: nameof(token));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// All unrecognized TokenTypes (including User tokens) are considered to be invalid.
|
// All unrecognized TokenTypes (including User tokens) are considered to be invalid.
|
||||||
|
|||||||
@@ -69,9 +69,12 @@ namespace Discord
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tests the behavior of <see cref="TokenUtils.ValidateToken(TokenType, string)"/>
|
/// Tests the behavior of <see cref="TokenUtils.ValidateToken(TokenType, string)"/>
|
||||||
/// to see that valid Bot tokens do not throw Exceptions.
|
/// 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.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Theory]
|
[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("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKWs")]
|
||||||
[InlineData("This appears to be completely invalid, however the current validation rules are not very strict.")]
|
[InlineData("This appears to be completely invalid, however the current validation rules are not very strict.")]
|
||||||
[InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKWss")]
|
[InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKWss")]
|
||||||
@@ -90,12 +93,12 @@ namespace Discord
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[Theory]
|
[Theory]
|
||||||
[InlineData("This is invalid")]
|
[InlineData("This is invalid")]
|
||||||
// missing a single character from the end
|
|
||||||
[InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kKW")]
|
|
||||||
// bearer token
|
// bearer token
|
||||||
[InlineData("6qrZcUqja7812RVdnEKjpzOL4CvHBFG")]
|
[InlineData("6qrZcUqja7812RVdnEKjpzOL4CvHBFG")]
|
||||||
// client secret
|
// client secret
|
||||||
[InlineData("937it3ow87i4ery69876wqire")]
|
[InlineData("937it3ow87i4ery69876wqire")]
|
||||||
|
// 57 char bot token
|
||||||
|
[InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.Cl2FMQ.ZnCjm1XVW7vRze4b7Cq4se7kK")]
|
||||||
public void TestBotTokenInvalidThrowsArgumentException(string token)
|
public void TestBotTokenInvalidThrowsArgumentException(string token)
|
||||||
{
|
{
|
||||||
Assert.Throws<ArgumentException>(() => TokenUtils.ValidateToken(TokenType.Bot, token));
|
Assert.Throws<ArgumentException>(() => TokenUtils.ValidateToken(TokenType.Bot, token));
|
||||||
@@ -113,6 +116,7 @@ namespace Discord
|
|||||||
// TokenType.User
|
// TokenType.User
|
||||||
[InlineData(0)]
|
[InlineData(0)]
|
||||||
// out of range TokenType
|
// out of range TokenType
|
||||||
|
[InlineData(-1)]
|
||||||
[InlineData(4)]
|
[InlineData(4)]
|
||||||
[InlineData(7)]
|
[InlineData(7)]
|
||||||
public void TestUnrecognizedTokenType(int type)
|
public void TestUnrecognizedTokenType(int type)
|
||||||
|
|||||||
Reference in New Issue
Block a user