From c884cb60dd17c191aba637dcb8dc4d6675dfc101 Mon Sep 17 00:00:00 2001 From: DaRuudii Date: Wed, 9 Oct 2019 20:12:53 +0200 Subject: [PATCH] Implement Mega Link Analyzer (#141) * Implement Mega Link Analyzer * Fixed failed test changed regex to match url boundary --- pastepwn/analyzers/__init__.py | 6 ++- pastepwn/analyzers/megalinkanalyzer.py | 13 +++++ .../analyzers/tests/megalinkanalyzer_test.py | 53 +++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 pastepwn/analyzers/megalinkanalyzer.py create mode 100644 pastepwn/analyzers/tests/megalinkanalyzer_test.py diff --git a/pastepwn/analyzers/__init__.py b/pastepwn/analyzers/__init__.py index f66a066..5a0e754 100644 --- a/pastepwn/analyzers/__init__.py +++ b/pastepwn/analyzers/__init__.py @@ -33,6 +33,7 @@ from .awsaccesskeyanalyzer import AWSAccessKeyAnalyzer from .googleoauthkeyanalyzer import GoogleOAuthKeyAnalyzer from .slackwebhookanalyzer import SlackWebhookAnalyzer +from .megalinkanalyzer import MegaLinkAnalyzer __all__ = ( @@ -64,9 +65,10 @@ 'EmailPasswordPairAnalyzer', 'FacebookAccessTokenAnalyzer', 'Base64Analyzer', - 'StripeApiKeyAnalyzer', + 'SlackWebhookAnalyzer', + 'MegaLinkAnalyzer', 'AWSSecretKeyAnalyzer', 'AWSAccessKeyAnalyzer', 'GoogleOAuthKeyAnalyzer', - 'SlackWebhookAnalyzer' + 'StripeApiKeyAnalyzer' ) diff --git a/pastepwn/analyzers/megalinkanalyzer.py b/pastepwn/analyzers/megalinkanalyzer.py new file mode 100644 index 0000000..efd7b8c --- /dev/null +++ b/pastepwn/analyzers/megalinkanalyzer.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +from .regexanalyzer import RegexAnalyzer + + +class MegaLinkAnalyzer(RegexAnalyzer): + """ + Analyzer to match mega links via regex + """ + name = "MegaLinkAnalyzer" + + def __init__(self, actions): + regex = r"\b(https?:\/\/)?mega\.nz\/#F![\w-]{8}(![\w-]{22}(![\w-]{8})?)?\b" + super().__init__(actions, regex) diff --git a/pastepwn/analyzers/tests/megalinkanalyzer_test.py b/pastepwn/analyzers/tests/megalinkanalyzer_test.py new file mode 100644 index 0000000..36bb2ce --- /dev/null +++ b/pastepwn/analyzers/tests/megalinkanalyzer_test.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +import unittest +from unittest import mock + +from pastepwn.analyzers.megalinkanalyzer import MegaLinkAnalyzer + + +class TestMegaLinkAnalyzer(unittest.TestCase): + def setUp(self): + self.analyzer = MegaLinkAnalyzer(None) + self.paste = mock.Mock() + + def test_match_positive(self): + """Test if positives are recognized""" + # working mega link (short version) + self.paste.body = "https://mega.nz/#F!XTQVEAZZ" + self.assertTrue(self.analyzer.match(self.paste)) + + # working mega link (medium version) + self.paste.body = "https://mega.nz/#F!XTQVEAZZ!eqxlOvTxJKnvAkYvjC0O8g" + self.assertTrue(self.analyzer.match(self.paste)) + + # working mega link (long version) + self.paste.body = "https://mega.nz/#F!PB8SSawR!SUokSlF2Zy8CR004DNFfNw!LQtniCoa" + self.assertTrue(self.analyzer.match(self.paste)) + + # without https header + self.paste.body = "mega.nz/#F!XTQVEAZZ!eqxlOvTxJKnvAkYvjC0O8g" + self.assertTrue(self.analyzer.match(self.paste)) + + # http header + self.paste.body = "http://mega.nz/#F!XTQVEAZZ!eqxlOvTxJKnvAkYvjC0O8g" + self.assertTrue(self.analyzer.match(self.paste)) + + # in a sentence + self.paste.body = "check out this file:https://mega.nz/#F!PB8SSawR!SUokSlF2Zy8CR004DNFfNw!LQtniCoa" + self.assertTrue(self.analyzer.match(self.paste)) + + def test_match_negative(self): + """Test if negatives are not recognized""" + self.paste.body = "" + self.assertFalse(self.analyzer.match(self.paste)) + + self.paste.body = None + self.assertFalse(self.analyzer.match(self.paste)) + + # Invalid segment length + self.paste.body = "https://mega.nz/#F!XTQVEAZZ1!eqxlOvTxJKnvAkYvjC0O8g" + self.assertFalse(self.analyzer.match(self.paste)) + + +if __name__ == '__main__': + unittest.main()