Skip to content

Commit

Permalink
TF-2903 Add sanitize url function
Browse files Browse the repository at this point in the history
  • Loading branch information
dab246 authored and hoangdat committed Sep 17, 2024
1 parent 0513427 commit eca41f4
Show file tree
Hide file tree
Showing 2 changed files with 142 additions and 0 deletions.
30 changes: 30 additions & 0 deletions core/lib/presentation/utils/html_transformer/sanitize_url.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import 'package:core/utils/app_logger.dart';
import 'package:get/get.dart';

class SanitizeUrl {

final bool defaultToHttps;

SanitizeUrl({this.defaultToHttps = true});

final _protocolIdentifierRegex = RegExp(
r'^(https?://)',
caseSensitive: false,
);

String process(String inputText) {
var originalUrl = inputText;

originalUrl = Uri.decodeFull(originalUrl);

if (GetUtils.isURL(originalUrl)) {
if (!originalUrl.startsWith(_protocolIdentifierRegex)) {
originalUrl = (defaultToHttps ? "https://" : "http://") + originalUrl;
}
} else {
originalUrl = '';
}
log('SanitizeUrl::process:originalUrl = $originalUrl');
return originalUrl;
}
}
112 changes: 112 additions & 0 deletions core/test/sanitize_url_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
import 'package:core/presentation/utils/html_transformer/sanitize_url.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
group('SanitizeUrl test', () {
final sanitizeUrl = SanitizeUrl();

test('SHOULD return valid url WHEN input text is valid url start with https', () {
final validUrl = sanitizeUrl.process('https://linagora.com');
expect(
validUrl,
equals('https://linagora.com')
);
});

test('SHOULD return valid url WHEN input text is valid url start with http', () {
final validUrl = sanitizeUrl.process('http://linagora.com');
expect(
validUrl,
equals('http://linagora.com')
);
});

test('SHOULD return valid url WHEN input text start with www', () {
final validUrl = sanitizeUrl.process('www.linagora.com');
expect(
validUrl,
equals('https://www.linagora.com')
);
});

test('SHOULD return valid url WHEN input text start with valid domain', () {
final validUrl = sanitizeUrl.process('linagora.com');
expect(
validUrl,
equals('https://linagora.com')
);
});

test('SHOULD return empty string text WHEN input text is empty', () {
final validUrl = sanitizeUrl.process('');
expect(
validUrl,
equals('')
);
});

test('SHOULD return empty string text WHEN input text not contain url', () {
final validUrl = sanitizeUrl.process('Linagora Company');
expect(
validUrl,
equals('')
);
});

test('SHOULD return empty string text WHEN input text is email address', () {
final validUrl = sanitizeUrl.process('example@linagora.com');
expect(
validUrl,
equals('')
);
});

test('SHOULD return empty string text WHEN input text is mailto link', () {
final validUrl = sanitizeUrl.process('mailto:example@linagora.com');
expect(
validUrl,
equals('')
);
});

test('SHOULD return empty string text WHEN input text is invalid url', () {
final validUrl = sanitizeUrl.process('linagora mail.com');
expect(
validUrl,
equals('')
);
});

test('SHOULD return empty string WHEN input text start with //', () {
final validUrl = sanitizeUrl.process('//linagora.com');
expect(
validUrl,
equals('')
);
});

test('SHOULD return empty string WHEN input text start with /', () {
final validUrl = sanitizeUrl.process('/linagora.com');
expect(
validUrl,
equals('')
);
});

test('SHOULD return valid url WHEN input text is url encoded start with https', () {
final validUrl = sanitizeUrl.process('https%3A%2F%2Flinagora.com');
expect(
validUrl,
equals('https://linagora.com')
);
});

test('SHOULD return valid url WHEN input text is url encoded start with http', () {
final validUrl = sanitizeUrl.process('http%3A%2F%2Flinagora.com');
expect(
validUrl,
equals('http://linagora.com')
);
});
});
}

0 comments on commit eca41f4

Please sign in to comment.