Skip to content

Commit 78ecaa2

Browse files
committed
feat: add skipMessageWhitelistCheck() in MessageBuilder
TICKET: SC-2419
1 parent e74eaaf commit 78ecaa2

File tree

7 files changed

+21
-43
lines changed

7 files changed

+21
-43
lines changed

modules/abstract-eth/src/lib/messages/eip191/eip191MessageBuilder.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ export class Eip191MessageBuilder extends BaseMessageBuilder {
1414
super(_coinConfig, MessageStandardType.EIP191);
1515
}
1616

17+
public skipMessageWhitelistCheck(): boolean {
18+
return true;
19+
}
20+
1721
/**
1822
* Builds an EIP-191 message instance with the provided options
1923
* @param options Options to create the message

modules/account-lib/src/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,8 @@ export { Vet };
206206
import * as CosmosSharedCoin from '@bitgo/sdk-coin-cosmos';
207207
export { CosmosSharedCoin };
208208

209-
import { validateAgainstMessageTemplates, MIDNIGHT_TNC_HASH } from './utils';
210-
export { MIDNIGHT_TNC_HASH };
209+
import { isMessageWhitelisted, MIDNIGHT_TNC_HASH } from './utils';
210+
export { isMessageWhitelisted, MIDNIGHT_TNC_HASH };
211211

212212
const coinBuilderMap = {
213213
trx: Trx.WrappedBuilder,
@@ -435,7 +435,7 @@ export async function verifyMessage(
435435
if (!isValidMessageEncoded) {
436436
return false;
437437
}
438-
return validateAgainstMessageTemplates(messageRaw);
438+
return isMessageWhitelisted(messageRaw);
439439
} catch (e) {
440440
console.error(`Error verifying message for coin ${coinName}:`, e);
441441
return false;

modules/account-lib/src/utils/messages/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const whitelistedMessageTemplates = [MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLAT
2020
* @param {string} messageRaw - The raw message to validate.
2121
* @returns {boolean} - Returns true if the message matches any of the whitelisted templates, false otherwise.
2222
*/
23-
export function validateAgainstMessageTemplates(messageRaw: string): boolean {
23+
export function isMessageWhitelisted(messageRaw: string): boolean {
2424
return whitelistedMessageTemplates.some((template) => {
2525
const regex = new RegExp(`^${template}$`, 's'); // 's' flag to match newlines
2626
return regex.test(messageRaw);

modules/account-lib/test/unit/utils/messages/index.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
11
import should from 'should';
2-
import { MIDNIGHT_TNC_HASH, validateAgainstMessageTemplates } from '../../../../src/utils';
2+
import { MIDNIGHT_TNC_HASH, isMessageWhitelisted } from '../../../../src/utils';
33

44
describe('Message validation', () => {
5-
describe('validateAgainstMessageTemplates', () => {
5+
describe('isMessageWhitelisted', () => {
66
const adaTestnetDestinationAddress = 'addr_test1vz7xs7ceu4xx9n5xn57lfe86vrwddqpp77vjwq5ptlkh49cqy3wur';
77
const adaMainnetDestinationAddress =
88
'addr1q9k6u7lhf467y2f8skr2dafldx2npsd8fymq0mslnj0t44nd4ealwnt4ug5j0pvx5m6n76v4xrq6wjfkqlhpl8y7httq2m9cmu';
99

1010
it('should validate testnet message matching the Midnight glacier drop claim template', () => {
1111
const messageRaw = `STAR 100 to ${adaTestnetDestinationAddress} ${MIDNIGHT_TNC_HASH}`;
1212

13-
const result = validateAgainstMessageTemplates(messageRaw);
13+
const result = isMessageWhitelisted(messageRaw);
1414

1515
should.equal(result, true);
1616
});
1717

1818
it('should validate mainnet message matching the Midnight glacier drop claim template', () => {
1919
const messageRaw = `STAR 100 to ${adaMainnetDestinationAddress} ${MIDNIGHT_TNC_HASH}`;
2020

21-
const result = validateAgainstMessageTemplates(messageRaw);
21+
const result = isMessageWhitelisted(messageRaw);
2222

2323
should.equal(result, true);
2424
});
2525

2626
it('should not validate message with incorrect format', () => {
2727
const messageRaw = `INCORRECT 100 to ${adaTestnetDestinationAddress} ${MIDNIGHT_TNC_HASH}`;
2828

29-
const result = validateAgainstMessageTemplates(messageRaw);
29+
const result = isMessageWhitelisted(messageRaw);
3030

3131
should.equal(result, false);
3232
});
@@ -35,7 +35,7 @@ describe('Message validation', () => {
3535
// Missing "to addr" part
3636
const messageRaw = `STAR 100 ${MIDNIGHT_TNC_HASH}`;
3737

38-
const result = validateAgainstMessageTemplates(messageRaw);
38+
const result = isMessageWhitelisted(messageRaw);
3939

4040
should.equal(result, false);
4141
});
@@ -46,21 +46,21 @@ describe('Message validation', () => {
4646
'5af1adf825baa496729e2eac1e895ebc77973744bce67f44276bf6006f5c21de863ed121e11828d8fc0241773191e26dc1134803a681a9a98ba0ae812553db24';
4747
const messageRaw = `STAR 100 to ${adaTestnetDestinationAddress} ${incorrectHash}`;
4848

49-
const result = validateAgainstMessageTemplates(messageRaw);
49+
const result = isMessageWhitelisted(messageRaw);
5050

5151
should.equal(result, false);
5252
});
5353

5454
it('should handle empty message', () => {
55-
const result = validateAgainstMessageTemplates('');
55+
const result = isMessageWhitelisted('');
5656

5757
should.equal(result, false);
5858
});
5959

6060
it('should not validate message with special regex characters', () => {
6161
const messageRaw = `STAR shade.with+special*chars to addr.with[special]chars ${MIDNIGHT_TNC_HASH}`;
6262

63-
const result = validateAgainstMessageTemplates(messageRaw);
63+
const result = isMessageWhitelisted(messageRaw);
6464

6565
should.equal(result, false);
6666
});

modules/sdk-coin-ada/src/lib/messages/cip8/cip8MessageBuilder.ts

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,6 @@ import { BaseMessageBuilder, IMessage, MessageOptions, MessageStandardType } fro
66
* Builder for CIP-8 messages
77
*/
88
export class Cip8MessageBuilder extends BaseMessageBuilder {
9-
private static readonly MIDNIGHT_TNC_HASH = '31a6bab50a84b8439adcfb786bb2020f6807e6e8fda629b424110fc7bb1c6b8b';
10-
11-
/*
12-
* matches a message that starts with "STAR ", followed by a number,
13-
* then " to addr" or " to addr_test1", followed by a 50+ character alphanumeric address,
14-
* and ends with the midnight TnC hash
15-
*/
16-
private static readonly MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE = `STAR \\d+ to addr(?:1|_test1)[a-z0-9]{50,} ${Cip8MessageBuilder.MIDNIGHT_TNC_HASH}`;
179
/**
1810
* Base constructor.
1911
* @param _coinConfig BaseCoin from statics library
@@ -30,15 +22,4 @@ export class Cip8MessageBuilder extends BaseMessageBuilder {
3022
async buildMessage(options: MessageOptions): Promise<IMessage> {
3123
return new Cip8Message(options);
3224
}
33-
34-
/**
35-
* Validates the signable payload
36-
* @param message The message to validate
37-
* @returns A boolean indicating whether the signable payload is valid
38-
*/
39-
public validateSignablePayload(message: string | Buffer): boolean {
40-
const messageStr = Buffer.isBuffer(message) ? message.toString('utf8') : message;
41-
const regex = new RegExp(`^${Cip8MessageBuilder.MIDNIGHT_GLACIER_DROP_CLAIM_MESSAGE_TEMPLATE}$`, 's');
42-
return regex.test(messageStr);
43-
}
4425
}

modules/sdk-core/src/account-lib/baseCoin/messages/baseMessageBuilder.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,8 @@ export abstract class BaseMessageBuilder implements IMessageBuilder {
118118
return this;
119119
}
120120

121-
/**
122-
* Validates the signable payload
123-
* @param message The message to validate
124-
* @returns A boolean indicating whether the signable payload is valid
125-
*/
126-
public validateSignablePayload(message: string | Buffer): boolean {
127-
return true;
121+
public skipMessageWhitelistCheck(): boolean {
122+
return false;
128123
}
129124

130125
/**

modules/sdk-core/src/account-lib/baseCoin/messages/iface.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,9 @@ export interface IMessageBuilder {
137137
getPayload(): MessagePayload | undefined;
138138

139139
/**
140-
* Validates the signable payload
141-
* @param message The message to validate
142-
* @returns A boolean indicating whether the signable payload is valid
140+
* Checks if the message builder should skip the whitelist check for messages
143141
*/
144-
validateSignablePayload(message: string | Buffer): boolean;
142+
skipMessageWhitelistCheck(): boolean;
145143

146144
/**
147145
* Gets the current metadata

0 commit comments

Comments
 (0)