msimerson/Haraka

View on GitHub
plugins/spamassassin.js

Summary

Maintainability
F
3 days
Test Coverage

File spamassassin.js has 305 lines of code (exceeds 250 allowed). Consider refactoring.
Open

'use strict';
// Call spamassassin via spamd

const sock  = require('./line_socket');
const utils = require('haraka-utils');
Severity: Minor
Found in plugins/spamassassin.js - About 3 hrs to fix

    Function hook_data_post has 75 lines of code (exceeds 25 allowed). Consider refactoring.
    Open

    exports.hook_data_post = function (next, connection) {
    
        if (this.should_skip(connection)) return next();
    
        const txn  = connection.transaction;
    Severity: Major
    Found in plugins/spamassassin.js - About 3 hrs to fix

      Function get_spamd_socket has 44 lines of code (exceeds 25 allowed). Consider refactoring.
      Open

      exports.get_spamd_socket = function (next, conn, headers) {
          const plugin = this;
          const txn = conn.transaction;
      
          // TODO: support multiple spamd backends
      Severity: Minor
      Found in plugins/spamassassin.js - About 1 hr to fix

        Function fixup_old_headers has a Cognitive Complexity of 14 (exceeds 5 allowed). Consider refactoring.
        Open

        exports.fixup_old_headers = function (txn) {
            const action = this.cfg.main.old_headers_action;
            const { headers } = txn.notes.spamassassin;
        
            let key;
        Severity: Minor
        Found in plugins/spamassassin.js - 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 do_header_updates has a Cognitive Complexity of 13 (exceeds 5 allowed). Consider refactoring.
        Open

        exports.do_header_updates = function (conn, spamd_response) {
            if (spamd_response.flag === 'Yes') {
                // X-Spam-Flag is added by SpamAssassin
                conn.transaction.remove_header('precedence');
                conn.transaction.add_header('Precedence', 'junk');
        Severity: Minor
        Found in plugins/spamassassin.js - 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 should_skip has a Cognitive Complexity of 12 (exceeds 5 allowed). Consider refactoring.
        Open

        exports.should_skip = function (connection = {}) {
            const { transaction } = connection;
            if (!transaction) return true;
        
            // a message might be skipped for multiple reasons, store each in results
        Severity: Minor
        Found in plugins/spamassassin.js - 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 should_skip has 32 lines of code (exceeds 25 allowed). Consider refactoring.
        Open

        exports.should_skip = function (connection = {}) {
            const { transaction } = connection;
            if (!transaction) return true;
        
            // a message might be skipped for multiple reasons, store each in results
        Severity: Minor
        Found in plugins/spamassassin.js - About 1 hr to fix

          Function load_spamassassin_ini has 32 lines of code (exceeds 25 allowed). Consider refactoring.
          Open

          exports.load_spamassassin_ini = function () {
              this.cfg = this.config.get('spamassassin.ini', {
                  booleans: [
                      '+add_headers',
                      '+check.authenticated',
          Severity: Minor
          Found in plugins/spamassassin.js - About 1 hr to fix

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

                if (this.cfg.check.private_ip == false && connection.remote.is_private) {
                    if (this.cfg.check.local_ip == true && connection.remote.is_local) {
                        // local IPs are included in private IPs
                    }
                    else {
            Severity: Major
            Found in plugins/spamassassin.js and 1 other location - About 3 hrs to fix
            plugins/clamd.js on lines 342..350

            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 109.

            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 4 locations. Consider refactoring.
            Open

                if (this.cfg.check.local_ip == false && connection.remote.is_local) {
                    connection.transaction.results.add(this, { skip: 'local_ip'});
                    result = true;
                }
            Severity: Major
            Found in plugins/spamassassin.js and 3 other locations - About 1 hr to fix
            plugins/clamd.js on lines 327..330
            plugins/clamd.js on lines 337..340
            plugins/spamassassin.js on lines 358..361

            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 68.

            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 4 locations. Consider refactoring.
            Open

                if (this.cfg.check.authenticated == false && connection.notes.auth_user) {
                    connection.transaction.results.add(this, { skip: 'authed'});
                    result = true;
                }
            Severity: Major
            Found in plugins/spamassassin.js and 3 other locations - About 1 hr to fix
            plugins/clamd.js on lines 327..330
            plugins/clamd.js on lines 337..340
            plugins/spamassassin.js on lines 368..371

            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 68.

            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

                if (this.cfg.check.relay == false && connection.relaying) {
                    connection.transaction.results.add(this, { skip: 'relay'});
                    result = true;
                }
            Severity: Major
            Found in plugins/spamassassin.js and 1 other location - About 1 hr to fix
            plugins/clamd.js on lines 332..335

            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 64.

            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

                    else {
                        if (txn) txn.results.add(plugin, {err: `timeout waiting for results` });
                        if (plugin.cfg.defer.scan_timeout) return next(DENYSOFT, 'spamd scan timeout');
                    }
            Severity: Major
            Found in plugins/spamassassin.js and 1 other location - About 1 hr to fix
            plugins/spamassassin.js on lines 300..303

            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 58.

            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

                    if (!this.is_connected) {
                        if (txn) txn.results.add(plugin, {err: `socket connect timeout` });
                        if (plugin.cfg.defer.connect_timeout) return next(DENYSOFT, 'spamd connect timeout');
                    }
            Severity: Major
            Found in plugins/spamassassin.js and 1 other location - About 1 hr to fix
            plugins/spamassassin.js on lines 304..307

            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 58.

            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

            There are no issues that match your filters.

            Category
            Status