All files / src/rules unsecure_fae.ts

100% Statements 63/63
100% Branches 16/16
100% Functions 6/6
100% Lines 63/63

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 631x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11400x 11400x 11400x 11400x 11400x 34037x 34037x 34037x 34037x 34037x 34037x 34037x 34037x 11400x 11400x 10902x 10902x 11400x 11400x 236x 236x 236x 11400x 11400x 233x 233x 11400x 11400x 305x 305x 67x 67x 238x 238x 305x 4x 4x 234x 305x 241x 241x 1x 1x 1x 1x 241x 234x 234x 234x 11400x 11400x
import * as Expressions from "../abap/2_statements/expressions";
import {Issue} from "../issue";
import {BasicRuleConfig} from "./_basic_rule_config";
import {IRegistry} from "../_iregistry";
import {IRule, IRuleMetadata, RuleTag} from "./_irule";
import {IObject} from "../objects/_iobject";
import {ABAPObject} from "../objects/_abap_object";
import {SyntaxLogic} from "../abap/5_syntax/syntax";
 
export class UnsecureFAEConf extends BasicRuleConfig {
}
 
export class UnsecureFAE implements IRule {
  private reg: IRegistry;
  private conf = new UnsecureFAEConf();
 
  public getMetadata(): IRuleMetadata {
    return {
      key: "unsecure_fae",
      title: "Unsecure FAE",
      shortDescription: `Checks for unsecure FAE`,
      extendedInformation: `Issues from rule check_syntax must be fixed before this rule takes effect`,
      tags: [RuleTag.Experimental, RuleTag.Performance],
    };
  }
 
  public getConfig() {
    return this.conf;
  }
 
  public initialize(reg: IRegistry) {
    this.reg = reg;
    return this;
  }
 
  public setConfig(conf: UnsecureFAEConf) {
    this.conf = conf;
  }
 
  public run(obj: IObject): Issue[] {
    const issues: Issue[] = [];
    if (!(obj instanceof ABAPObject)) {
      return issues;
    }
 
    const syntaxResult = new SyntaxLogic(this.reg, obj).run();
    if (syntaxResult.issues.length > 0) {
      return issues;
    }
 
    for (const f of obj.getABAPFiles()) {
      // todo
      for (const e of f.getStructure()?.findAllExpressions(Expressions.SQLForAllEntries) || []) {
        const token = e.getFirstToken();
        const message = "Unsecure FAE";
        issues.push(Issue.atToken(f, token, message, this.getMetadata().key, this.getConfig().severity));
      }
    }
 
    return issues;
  }
 
}