nil0x42/phpsploit

View on GitHub
src/core/tunnel/handler.py

Summary

Maintainability
F
5 days
Test Coverage

File handler.py has 637 lines of code (exceeds 250 allowed). Consider refactoring.
Open

"""Phpsploit HTTP request handler"""
__all__ = ["Request", "new_request", "get_raw_requests"]

import sys
import re
Severity: Major
Found in src/core/tunnel/handler.py - About 1 day to fix

    Function build_multipart_request has a Cognitive Complexity of 34 (exceeds 5 allowed). Consider refactoring.
    Open

        def build_multipart_request(self, method, php_payload):
            """build a multipart request for `php_payload` with HTTP `method`
    
            For infos about return format, read build_request() docstring.
            """
    Severity: Minor
    Found in src/core/tunnel/handler.py - About 5 hrs to fix

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Function Build has a Cognitive Complexity of 29 (exceeds 5 allowed). Consider refactoring.
    Open

        def Build(self, php_payload):
            """Main request Builder:
    
            if takes the basic php payload as argument,
            and returns the apropriate request object.
    Severity: Minor
    Found in src/core/tunnel/handler.py - About 4 hrs to fix

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Cyclomatic complexity is too high in method Build. (19)
    Open

        def Build(self, php_payload):
            """Main request Builder:
    
            if takes the basic php payload as argument,
            and returns the apropriate request object.
    Severity: Minor
    Found in src/core/tunnel/handler.py by radon

    Cyclomatic Complexity

    Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

    Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

    Construct Effect on CC Reasoning
    if +1 An if statement is a single decision.
    elif +1 The elif statement adds another decision.
    else +0 The else statement does not cause a new decision. The decision is at the if.
    for +1 There is a decision at the start of the loop.
    while +1 There is a decision at the while statement.
    except +1 Each except branch adds a new conditional path of execution.
    finally +0 The finally block is unconditionally executed.
    with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
    assert +1 The assert statement internally roughly equals a conditional statement.
    Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
    Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

    Source: http://radon.readthedocs.org/en/latest/intro.html

    Function Send has a Cognitive Complexity of 24 (exceeds 5 allowed). Consider refactoring.
    Open

        def Send(self, request):
            """Main request Sender:
    
            if takes the concerned request object as argument
            and returns the unparsed and decapsulated phpsploit response
    Severity: Minor
    Found in src/core/tunnel/handler.py - About 3 hrs to fix

    Cognitive Complexity

    Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

    A method's cognitive complexity is based on a few simple rules:

    • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
    • Code is considered more complex for each "break in the linear flow of the code"
    • Code is considered more complex when "flow breaking structures are nested"

    Further reading

    Cyclomatic complexity is too high in method build_multipart_request. (15)
    Open

        def build_multipart_request(self, method, php_payload):
            """build a multipart request for `php_payload` with HTTP `method`
    
            For infos about return format, read build_request() docstring.
            """
    Severity: Minor
    Found in src/core/tunnel/handler.py by radon

    Cyclomatic Complexity

    Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

    Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

    Construct Effect on CC Reasoning
    if +1 An if statement is a single decision.
    elif +1 The elif statement adds another decision.
    else +0 The else statement does not cause a new decision. The decision is at the if.
    for +1 There is a decision at the start of the loop.
    while +1 There is a decision at the while statement.
    except +1 Each except branch adds a new conditional path of execution.
    finally +0 The finally block is unconditionally executed.
    with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
    assert +1 The assert statement internally roughly equals a conditional statement.
    Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
    Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

    Source: http://radon.readthedocs.org/en/latest/intro.html

    Cyclomatic complexity is too high in method Read. (12)
    Open

        def Read(self, response):
            """Main request Reader
    
            if takes the http response data as argument
            and writes the __RESULT__'s php data into the self.response string,
    Severity: Minor
    Found in src/core/tunnel/handler.py by radon

    Cyclomatic Complexity

    Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

    Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

    Construct Effect on CC Reasoning
    if +1 An if statement is a single decision.
    elif +1 The elif statement adds another decision.
    else +0 The else statement does not cause a new decision. The decision is at the if.
    for +1 There is a decision at the start of the loop.
    while +1 There is a decision at the while statement.
    except +1 Each except branch adds a new conditional path of execution.
    finally +0 The finally block is unconditionally executed.
    with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
    assert +1 The assert statement internally roughly equals a conditional statement.
    Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
    Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

    Source: http://radon.readthedocs.org/en/latest/intro.html

    Cyclomatic complexity is too high in method Send. (11)
    Open

        def Send(self, request):
            """Main request Sender:
    
            if takes the concerned request object as argument
            and returns the unparsed and decapsulated phpsploit response
    Severity: Minor
    Found in src/core/tunnel/handler.py by radon

    Cyclomatic Complexity

    Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

    Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

    Construct Effect on CC Reasoning
    if +1 An if statement is a single decision.
    elif +1 The elif statement adds another decision.
    else +0 The else statement does not cause a new decision. The decision is at the if.
    for +1 There is a decision at the start of the loop.
    while +1 There is a decision at the while statement.
    except +1 Each except branch adds a new conditional path of execution.
    finally +0 The finally block is unconditionally executed.
    with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
    assert +1 The assert statement internally roughly equals a conditional statement.
    Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
    Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

    Source: http://radon.readthedocs.org/en/latest/intro.html

    Request has 22 functions (exceeds 20 allowed). Consider refactoring.
    Open

    class Request:
        """Phpsploit HTTP Request Handler
        """
        # the list of available methods
        methods = ['GET', 'POST']
    Severity: Minor
    Found in src/core/tunnel/handler.py - About 2 hrs to fix

      Cyclomatic complexity is too high in method build_forwarder. (9)
      Open

          def build_forwarder(self, method, decoder):
              """build the effective payload forwarder, which is in fact
              a header using the PASSKEY setting as name.
              The payload forwarder is called by the remote backdoor, and then
              formats the final payload if necessary before executing it.
      Severity: Minor
      Found in src/core/tunnel/handler.py by radon

      Cyclomatic Complexity

      Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

      Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

      Construct Effect on CC Reasoning
      if +1 An if statement is a single decision.
      elif +1 The elif statement adds another decision.
      else +0 The else statement does not cause a new decision. The decision is at the if.
      for +1 There is a decision at the start of the loop.
      while +1 There is a decision at the while statement.
      except +1 Each except branch adds a new conditional path of execution.
      finally +0 The finally block is unconditionally executed.
      with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
      assert +1 The assert statement internally roughly equals a conditional statement.
      Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
      Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

      Source: http://radon.readthedocs.org/en/latest/intro.html

      Cyclomatic complexity is too high in method send_single_request. (9)
      Open

          def send_single_request(self, request):
              """send a single request object element (a request object's single
              tuple, in the form mentionned in the build_request() docstring.
              A response dict() will be returned, with 'error' and 'data' keys.
      
      
      Severity: Minor
      Found in src/core/tunnel/handler.py by radon

      Cyclomatic Complexity

      Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

      Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

      Construct Effect on CC Reasoning
      if +1 An if statement is a single decision.
      elif +1 The elif statement adds another decision.
      else +0 The else statement does not cause a new decision. The decision is at the if.
      for +1 There is a decision at the start of the loop.
      while +1 There is a decision at the while statement.
      except +1 Each except branch adds a new conditional path of execution.
      finally +0 The finally block is unconditionally executed.
      with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
      assert +1 The assert statement internally roughly equals a conditional statement.
      Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
      Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

      Source: http://radon.readthedocs.org/en/latest/intro.html

      Cyclomatic complexity is too high in method get_php_errors. (7)
      Open

          @staticmethod
          def get_php_errors(data):
              """function designed to parse php errors from phpsploit response
              for better output and plugin debugging purposes.
              Its is called by the Read() function and returns the $error string
      Severity: Minor
      Found in src/core/tunnel/handler.py by radon

      Cyclomatic Complexity

      Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

      Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

      Construct Effect on CC Reasoning
      if +1 An if statement is a single decision.
      elif +1 The elif statement adds another decision.
      else +0 The else statement does not cause a new decision. The decision is at the if.
      for +1 There is a decision at the start of the loop.
      while +1 There is a decision at the while statement.
      except +1 Each except branch adds a new conditional path of execution.
      finally +0 The finally block is unconditionally executed.
      with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
      assert +1 The assert statement internally roughly equals a conditional statement.
      Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
      Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

      Source: http://radon.readthedocs.org/en/latest/intro.html

      Function open has a Cognitive Complexity of 15 (exceeds 5 allowed). Consider refactoring.
      Open

          def open(self, php_payload):
              """open a request to the server with the given php payload
              It respectively calls the Build(), Send() and Read() methods.
              if one of these methods returns a string, it will be considered as
              an error, so execution will stop, and self.error will be filled.
      Severity: Minor
      Found in src/core/tunnel/handler.py - About 1 hr to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Cyclomatic complexity is too high in method load_multipart. (6)
      Open

          def load_multipart(self):
              """enable the multi-request payload capability.
              - ask user to determine a remote writeable directory if
                tunnel opener couldn't file one automatically.
              - choose appropriate multipart_file, which is a remote temporary file
      Severity: Minor
      Found in src/core/tunnel/handler.py by radon

      Cyclomatic Complexity

      Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

      Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

      Construct Effect on CC Reasoning
      if +1 An if statement is a single decision.
      elif +1 The elif statement adds another decision.
      else +0 The else statement does not cause a new decision. The decision is at the if.
      for +1 There is a decision at the start of the loop.
      while +1 There is a decision at the while statement.
      except +1 Each except branch adds a new conditional path of execution.
      finally +0 The finally block is unconditionally executed.
      with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
      assert +1 The assert statement internally roughly equals a conditional statement.
      Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
      Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

      Source: http://radon.readthedocs.org/en/latest/intro.html

      Cyclomatic complexity is too high in method open. (6)
      Open

          def open(self, php_payload):
              """open a request to the server with the given php payload
              It respectively calls the Build(), Send() and Read() methods.
              if one of these methods returns a string, it will be considered as
              an error, so execution will stop, and self.error will be filled.
      Severity: Minor
      Found in src/core/tunnel/handler.py by radon

      Cyclomatic Complexity

      Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

      Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

      Construct Effect on CC Reasoning
      if +1 An if statement is a single decision.
      elif +1 The elif statement adds another decision.
      else +0 The else statement does not cause a new decision. The decision is at the if.
      for +1 There is a decision at the start of the loop.
      while +1 There is a decision at the while statement.
      except +1 Each except branch adds a new conditional path of execution.
      finally +0 The finally block is unconditionally executed.
      with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
      assert +1 The assert statement internally roughly equals a conditional statement.
      Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
      Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

      Source: http://radon.readthedocs.org/en/latest/intro.html

      Function send_single_request has a Cognitive Complexity of 13 (exceeds 5 allowed). Consider refactoring.
      Open

          def send_single_request(self, request):
              """send a single request object element (a request object's single
              tuple, in the form mentionned in the build_request() docstring.
              A response dict() will be returned, with 'error' and 'data' keys.
      
      
      Severity: Minor
      Found in src/core/tunnel/handler.py - About 1 hr to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Function Read has a Cognitive Complexity of 13 (exceeds 5 allowed). Consider refactoring.
      Open

          def Read(self, response):
              """Main request Reader
      
              if takes the http response data as argument
              and writes the __RESULT__'s php data into the self.response string,
      Severity: Minor
      Found in src/core/tunnel/handler.py - About 1 hr to fix

      Cognitive Complexity

      Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

      A method's cognitive complexity is based on a few simple rules:

      • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
      • Code is considered more complex for each "break in the linear flow of the code"
      • Code is considered more complex when "flow breaking structures are nested"

      Further reading

      Function __init__ has 28 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

          def __init__(self):
              # customizable variables
              self.target_obj = session.Conf.TARGET(call=False)
              self.hostname = self.target_obj.host
              self.port = self.target_obj.port
      Severity: Minor
      Found in src/core/tunnel/handler.py - About 1 hr to fix

        Function get_php_errors has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
        Open

            def get_php_errors(data):
                """function designed to parse php errors from phpsploit response
                for better output and plugin debugging purposes.
                Its is called by the Read() function and returns the $error string
        
        
        Severity: Minor
        Found in src/core/tunnel/handler.py - About 55 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        Function load_multipart has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
        Open

            def load_multipart(self):
                """enable the multi-request payload capability.
                - ask user to determine a remote writeable directory if
                  tunnel opener couldn't file one automatically.
                - choose appropriate multipart_file, which is a remote temporary file
        Severity: Minor
        Found in src/core/tunnel/handler.py - About 55 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        Function build_forwarder has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring.
        Open

            def build_forwarder(self, method, decoder):
                """build the effective payload forwarder, which is in fact
                a header using the PASSKEY setting as name.
                The payload forwarder is called by the remote backdoor, and then
                formats the final payload if necessary before executing it.
        Severity: Minor
        Found in src/core/tunnel/handler.py - About 35 mins to fix

        Cognitive Complexity

        Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

        A method's cognitive complexity is based on a few simple rules:

        • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
        • Code is considered more complex for each "break in the linear flow of the code"
        • Code is considered more complex when "flow breaking structures are nested"

        Further reading

        Avoid too many return statements within this function.
        Open

                return response
        Severity: Major
        Found in src/core/tunnel/handler.py - About 30 mins to fix

          Refactor this function to reduce its Cognitive Complexity from 34 to the 15 allowed.
          Open

              def build_multipart_request(self, method, php_payload):
          Severity: Critical
          Found in src/core/tunnel/handler.py by sonar-python

          Cognitive Complexity is a measure of how hard the control flow of a function is to understand. Functions with high Cognitive Complexity will be difficult to maintain.

          See

          Refactor this function to reduce its Cognitive Complexity from 24 to the 15 allowed.
          Open

              def Send(self, request):
          Severity: Critical
          Found in src/core/tunnel/handler.py by sonar-python

          Cognitive Complexity is a measure of how hard the control flow of a function is to understand. Functions with high Cognitive Complexity will be difficult to maintain.

          See

          Refactor this function to reduce its Cognitive Complexity from 29 to the 15 allowed.
          Open

              def Build(self, php_payload):
          Severity: Critical
          Found in src/core/tunnel/handler.py by sonar-python

          Cognitive Complexity is a measure of how hard the control flow of a function is to understand. Functions with high Cognitive Complexity will be difficult to maintain.

          See

          Remove this commented out code.
          Open

                      # try:
          Severity: Major
          Found in src/core/tunnel/handler.py by sonar-python

          Programmers should not comment out code as it bloats programs and reduces readability.

          Unused code should be deleted and can be retrieved from source control history if required.

          See

          • MISRA C:2004, 2.4 - Sections of code should not be "commented out".
          • MISRA C++:2008, 2-7-2 - Sections of code shall not be "commented out" using C-style comments.
          • MISRA C++:2008, 2-7-3 - Sections of code should not be "commented out" using C++ comments.
          • MISRA C:2012, Dir. 4.4 - Sections of code should not be "commented out"

          Rename method "Read" to prevent any misunderstanding/clash with method "read" defined on line 582
          Open

              def Read(self, response):
          Severity: Blocker
          Found in src/core/tunnel/handler.py by sonar-python

          Looking at the set of methods and fields in a class and finding two that differ only by capitalization is confusing to users of the class.

          This situation may simply indicate poor naming. Method names should be action-oriented, and thus contain a verb, which is unlikely in the case where both a method and a field have the same name (with or without capitalization differences). However, renaming a public method could be disruptive to callers. Therefore renaming the member is the recommended action.

          Noncompliant Code Example

          class SomeClass:
              lookUp = false
              def lookup():       # Non-compliant; method name differs from field name only by capitalization
                  pass
          

          Compliant Solution

          class SomeClass:
              lookUp = false
              def getLookUp():
                  pass
          

          Remove this commented out code.
          Open

                  # import pprint
          Severity: Major
          Found in src/core/tunnel/handler.py by sonar-python

          Programmers should not comment out code as it bloats programs and reduces readability.

          Unused code should be deleted and can be retrieved from source control history if required.

          See

          • MISRA C:2004, 2.4 - Sections of code should not be "commented out".
          • MISRA C++:2008, 2-7-2 - Sections of code shall not be "commented out" using C-style comments.
          • MISRA C++:2008, 2-7-3 - Sections of code should not be "commented out" using C++ comments.
          • MISRA C:2012, Dir. 4.4 - Sections of code should not be "commented out"

          Remove the code after this "return".
          Open

                  return None
          Severity: Major
          Found in src/core/tunnel/handler.py by sonar-python

          Jump statements (return, break, continue, and raise) move control flow out of the current code block. Typically, any statements in a block that come after a jump are simply wasted keystrokes lying in wait to confuse the unwary.

          Noncompliant Code Example

          def fun(a):
            i = 10
            return i + a       # Noncompliant
            i += 1             # this is never executed
          

          Compliant Solution

          def fun(a):
            i = 10
            return i + a
          

          See

          • MISRA C:2004, 14.1 - There shall be no unreachable code
          • MISRA C++:2008, 0-1-1 - A project shall not contain unreachable code
          • MISRA C++:2008, 0-1-9 - There shall be no dead code
          • MISRA C:2012, 2.1 - A project shall not contain unreachable code
          • MISRA C:2012, 2.2 - There shall be no dead code
          • MITRE, CWE-561 - Dead Code
          • CERT, MSC56-J. - Detect and remove superfluous code and values
          • CERT, MSC12-C. - Detect and remove code that has no effect or is never executed
          • CERT, MSC07-CPP. - Detect and remove dead code

          Either merge this branch with the identical one on line "40" or change one of the implementations.
          Open

                      _RAW_REQUESTS_LIST.append(data)
          Severity: Major
          Found in src/core/tunnel/handler.py by sonar-python

          Having two branches in the same if structure with the same implementation is at best duplicate code, and at worst a coding error. If the same logic is truly needed for both instances, then they should be combined.

          Noncompliant Code Example

          if 0 <= a < 10:
              do_the_thing()
          elif 10 <= a < 20:
              do_the_other_thing()
          elif 20 <= a < 50:
              do_the_thing()  # Noncompliant; duplicates first condition
          else:
              do_the_rest()
          
          b = 4 if a > 12 else 4
          

          Compliant Solution

          if (0 <= a < 10) or (20 <= a < 50):
              do_the_thing()
          elif 10 <= a < 20:
              do_the_other_thing()
          else:
              do_the_rest()
          
          b = 4
          

          or

          if 0 <= a < 10:
              do_the_thing()
          elif 10 <= a < 20:
              do_the_other_thing()
          elif 20 <= a < 50:
              do_the_third_thing()
          else:
              do_the_rest()
          
          b = 8 if a > 12 else 4
          

          Similar blocks of code found in 2 locations. Consider refactoring.
          Open

                  if "'%s'" not in hdr_payload and \
                     '"%s"' not in hdr_payload and \
                     not b64_forwarder.isalnum():
                      # create a visible sample of the effective b64 payload
                      len_third = float(len(forwarder) / 3)
          Severity: Major
          Found in src/core/tunnel/handler.py and 1 other location - About 5 hrs to fix
          src/core/tunnel/handler.py on lines 298..306

          Duplicated Code

          Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

          Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

          When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

          Tuning

          This issue has a mass of 87.

          We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

          The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

          If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

          See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

          Refactorings

          Further Reading

          Similar blocks of code found in 2 locations. Consider refactoring.
          Open

                  elif "'%s'" not in hdr_payload and \
                          '"%s"' not in hdr_payload:
                      len_third = float(len(forwarder) / 3)
                      len_third = int(round(len_third + 0.5))
                      sample_sep = colorize("%Reset", "\n[*] ", "%Cyan")
          Severity: Major
          Found in src/core/tunnel/handler.py and 1 other location - About 5 hrs to fix
          src/core/tunnel/handler.py on lines 283..293

          Duplicated Code

          Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

          Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

          When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

          Tuning

          This issue has a mass of 87.

          We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

          The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

          If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

          See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

          Refactorings

          Further Reading

          Too many leading '#' for block comment
          Open

          ### Log raw http requests with custom HTTP Connection Handlers
          Severity: Minor
          Found in src/core/tunnel/handler.py by pep8

          Separate inline comments by at least two spaces.

          An inline comment is a comment on the same line as a statement.
          Inline comments should be separated by at least two spaces from the
          statement. They should start with a # and a single space.
          
          Each line of a block comment starts with a # and a single space
          (unless it is indented text inside the comment).
          
          Okay: x = x + 1  # Increment x
          Okay: x = x + 1    # Increment x
          Okay: # Block comment
          E261: x = x + 1 # Increment x
          E262: x = x + 1  #Increment x
          E262: x = x + 1  #  Increment x
          E265: #Block comment
          E266: ### Block comment

          Do not use bare 'except'
          Open

                              except:
          Severity: Minor
          Found in src/core/tunnel/handler.py by pep8

          When catching exceptions, mention specific exceptions when possible.

          Okay: except Exception:
          Okay: except BaseException:
          E722: except:

          Expected 2 blank lines, found 1
          Open

          class _CustomHTTPConnection(http.client.HTTPConnection):
          Severity: Minor
          Found in src/core/tunnel/handler.py by pep8

          Separate top-level function and class definitions with two blank lines.

          Method definitions inside a class are separated by a single blank
          line.
          
          Extra blank lines may be used (sparingly) to separate groups of
          related functions.  Blank lines may be omitted between a bunch of
          related one-liners (e.g. a set of dummy implementations).
          
          Use blank lines in functions, sparingly, to indicate logical
          sections.
          
          Okay: def a():\n    pass\n\n\ndef b():\n    pass
          Okay: def a():\n    pass\n\n\nasync def b():\n    pass
          Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
          Okay: default = 1\nfoo = 1
          Okay: classify = 1\nfoo = 1
          
          E301: class Foo:\n    b = 0\n    def bar():\n        pass
          E302: def a():\n    pass\n\ndef b(n):\n    pass
          E302: def a():\n    pass\n\nasync def b(n):\n    pass
          E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
          E303: def a():\n\n\n\n    pass
          E304: @decorator\n\ndef a():\n    pass
          E305: def a():\n    pass\na()
          E306: def a():\n    def b():\n        pass\n    def c():\n        pass

          Line too long (80 > 79 characters)
          Open

                          line = re.sub(r' \[<a.*?a>\]', '', line)  # remove html link tag
          Severity: Minor
          Found in src/core/tunnel/handler.py by pep8

          Limit all lines to a maximum of 79 characters.

          There are still many devices around that are limited to 80 character
          lines; plus, limiting windows to 80 characters makes it possible to
          have several windows side-by-side.  The default wrapping on such
          devices looks ugly.  Therefore, please limit all lines to a maximum
          of 79 characters. For flowing long blocks of text (docstrings or
          comments), limiting the length to 72 characters is recommended.
          
          Reports error E501.

          Do not use bare 'except'
          Open

                      except:
          Severity: Minor
          Found in src/core/tunnel/handler.py by pep8

          When catching exceptions, mention specific exceptions when possible.

          Okay: except Exception:
          Okay: except BaseException:
          E722: except:

          Do not use bare 'except'
          Open

                          except:
          Severity: Minor
          Found in src/core/tunnel/handler.py by pep8

          When catching exceptions, mention specific exceptions when possible.

          Okay: except Exception:
          Okay: except BaseException:
          E722: except:

          Expected 2 blank lines, found 1
          Open

          class _CustomHTTPHandler(urllib.request.HTTPHandler):
          Severity: Minor
          Found in src/core/tunnel/handler.py by pep8

          Separate top-level function and class definitions with two blank lines.

          Method definitions inside a class are separated by a single blank
          line.
          
          Extra blank lines may be used (sparingly) to separate groups of
          related functions.  Blank lines may be omitted between a bunch of
          related one-liners (e.g. a set of dummy implementations).
          
          Use blank lines in functions, sparingly, to indicate logical
          sections.
          
          Okay: def a():\n    pass\n\n\ndef b():\n    pass
          Okay: def a():\n    pass\n\n\nasync def b():\n    pass
          Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
          Okay: default = 1\nfoo = 1
          Okay: classify = 1\nfoo = 1
          
          E301: class Foo:\n    b = 0\n    def bar():\n        pass
          E302: def a():\n    pass\n\ndef b(n):\n    pass
          E302: def a():\n    pass\n\nasync def b(n):\n    pass
          E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
          E303: def a():\n\n\n\n    pass
          E304: @decorator\n\ndef a():\n    pass
          E305: def a():\n    pass\na()
          E306: def a():\n    def b():\n        pass\n    def c():\n        pass

          Line too long (80 > 79 characters)
          Open

                          # only if test_size if bigger than the max_flaw, else return err
          Severity: Minor
          Found in src/core/tunnel/handler.py by pep8

          Limit all lines to a maximum of 79 characters.

          There are still many devices around that are limited to 80 character
          lines; plus, limiting windows to 80 characters makes it possible to
          have several windows side-by-side.  The default wrapping on such
          devices looks ugly.  Therefore, please limit all lines to a maximum
          of 79 characters. For flowing long blocks of text (docstrings or
          comments), limiting the length to 72 characters is recommended.
          
          Reports error E501.

          Expected 2 blank lines after class or function definition, found 0
          Open

          urllib.request.__HTTPHandler__ = urllib.request.HTTPHandler
          Severity: Minor
          Found in src/core/tunnel/handler.py by pep8

          Separate top-level function and class definitions with two blank lines.

          Method definitions inside a class are separated by a single blank
          line.
          
          Extra blank lines may be used (sparingly) to separate groups of
          related functions.  Blank lines may be omitted between a bunch of
          related one-liners (e.g. a set of dummy implementations).
          
          Use blank lines in functions, sparingly, to indicate logical
          sections.
          
          Okay: def a():\n    pass\n\n\ndef b():\n    pass
          Okay: def a():\n    pass\n\n\nasync def b():\n    pass
          Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
          Okay: default = 1\nfoo = 1
          Okay: classify = 1\nfoo = 1
          
          E301: class Foo:\n    b = 0\n    def bar():\n        pass
          E302: def a():\n    pass\n\ndef b(n):\n    pass
          E302: def a():\n    pass\n\nasync def b(n):\n    pass
          E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
          E303: def a():\n\n\n\n    pass
          E304: @decorator\n\ndef a():\n    pass
          E305: def a():\n    pass\na()
          E306: def a():\n    def b():\n        pass\n    def c():\n        pass

          Expected 2 blank lines after class or function definition, found 0
          Open

          http.client.__HTTPConnection__ = http.client.HTTPConnection
          Severity: Minor
          Found in src/core/tunnel/handler.py by pep8

          Separate top-level function and class definitions with two blank lines.

          Method definitions inside a class are separated by a single blank
          line.
          
          Extra blank lines may be used (sparingly) to separate groups of
          related functions.  Blank lines may be omitted between a bunch of
          related one-liners (e.g. a set of dummy implementations).
          
          Use blank lines in functions, sparingly, to indicate logical
          sections.
          
          Okay: def a():\n    pass\n\n\ndef b():\n    pass
          Okay: def a():\n    pass\n\n\nasync def b():\n    pass
          Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
          Okay: default = 1\nfoo = 1
          Okay: classify = 1\nfoo = 1
          
          E301: class Foo:\n    b = 0\n    def bar():\n        pass
          E302: def a():\n    pass\n\ndef b(n):\n    pass
          E302: def a():\n    pass\n\nasync def b(n):\n    pass
          E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
          E303: def a():\n\n\n\n    pass
          E304: @decorator\n\ndef a():\n    pass
          E305: def a():\n    pass\na()
          E306: def a():\n    def b():\n        pass\n    def c():\n        pass

          Do not use bare 'except'
          Open

                      except:
          Severity: Minor
          Found in src/core/tunnel/handler.py by pep8

          When catching exceptions, mention specific exceptions when possible.

          Okay: except Exception:
          Okay: except BaseException:
          E722: except:

          Rename function "updateStatus" to match the regular expression ^[a-z_][a-z0-9_]{2,}$.
          Open

                  def updateStatus(curReqNum):
          Severity: Major
          Found in src/core/tunnel/handler.py by sonar-python

          Shared coding conventions allow teams to collaborate efficiently. This rule checks that all function names match a provided regular expression.

          Noncompliant Code Example

          With the default provided regular expression: ^[a-z_][a-z0-9_]{2,30}$

          def MyFunction(a,b):
              ...
          

          Compliant Solution

          def my_function(a,b):
              ...
          

          There are no issues that match your filters.

          Category
          Status