Skip to content

Commit

Permalink
Implement Mega Link Analyzer (#141)
Browse files Browse the repository at this point in the history
* Implement Mega Link Analyzer

* Fixed failed test

changed regex to match url boundary
  • Loading branch information
DaRuudii authored and d-Rickyy-b committed Oct 9, 2019
1 parent f9bd202 commit c884cb6
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 2 deletions.
6 changes: 4 additions & 2 deletions pastepwn/analyzers/__init__.py
Expand Up @@ -33,6 +33,7 @@
from .awsaccesskeyanalyzer import AWSAccessKeyAnalyzer
from .googleoauthkeyanalyzer import GoogleOAuthKeyAnalyzer
from .slackwebhookanalyzer import SlackWebhookAnalyzer
from .megalinkanalyzer import MegaLinkAnalyzer


__all__ = (
Expand Down Expand Up @@ -64,9 +65,10 @@
'EmailPasswordPairAnalyzer',
'FacebookAccessTokenAnalyzer',
'Base64Analyzer',
'StripeApiKeyAnalyzer',
'SlackWebhookAnalyzer',
'MegaLinkAnalyzer',
'AWSSecretKeyAnalyzer',
'AWSAccessKeyAnalyzer',
'GoogleOAuthKeyAnalyzer',
'SlackWebhookAnalyzer'
'StripeApiKeyAnalyzer'
)
13 changes: 13 additions & 0 deletions 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)
53 changes: 53 additions & 0 deletions 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()

0 comments on commit c884cb6

Please sign in to comment.