public TextClassifier(ClassifierRule inRule) { this.ClassifierRule = inRule; }
public DirClassifier(ClassifierRule inRule) { this.ClassifierRule = inRule; }
public bool ClassifyFile(FileInfo fileInfo) { BlockingMq Mq = BlockingMq.GetMq(); // figure out what part we gonna look at string stringToMatch = null; switch (ClassifierRule.MatchLocation) { case MatchLoc.FileExtension: stringToMatch = fileInfo.Extension; // special handling to treat files named like 'thing.kdbx.bak' if (stringToMatch == ".bak") { // strip off .bak string subName = fileInfo.Name.Replace(".bak", ""); stringToMatch = Path.GetExtension(subName); // if this results in no file extension, put it back. if (stringToMatch == "") { stringToMatch = ".bak"; } } // this is insane that i have to do this but apparently files with no extension return // this bullshit if (stringToMatch == "") { return(false); } break; case MatchLoc.FileName: stringToMatch = fileInfo.Name; break; case MatchLoc.FilePath: stringToMatch = fileInfo.FullName; break; case MatchLoc.FileLength: if (!SizeMatch(fileInfo)) { return(false); } else { break; } default: Mq.Error("You've got a misconfigured file classifier rule named " + ClassifierRule.RuleName + "."); return(false); } TextResult textResult = null; if (!String.IsNullOrEmpty(stringToMatch)) { TextClassifier textClassifier = new TextClassifier(ClassifierRule); // check if it matches textResult = textClassifier.TextMatch(stringToMatch); if (textResult == null) { // if it doesn't we just bail now. return(false); } } FileResult fileResult; // if it matches, see what we're gonna do with it switch (ClassifierRule.MatchAction) { case MatchAction.Discard: // chuck it. return(true); case MatchAction.Snaffle: // snaffle that bad boy fileResult = new FileResult(fileInfo) { MatchedRule = ClassifierRule, TextResult = textResult }; Mq.FileResult(fileResult); return(true); case MatchAction.CheckForKeys: // do a special x509 dance if (x509PrivKeyMatch(fileInfo)) { fileResult = new FileResult(fileInfo) { MatchedRule = ClassifierRule }; Mq.FileResult(fileResult); } return(true); case MatchAction.Relay: // bounce it on to the next ClassifierRule // TODO concurrency uplift make this a new task on the poolq try { ClassifierRule nextRule = MyOptions.ClassifierRules.First(thing => thing.RuleName == ClassifierRule.RelayTarget); if (nextRule.EnumerationScope == EnumerationScope.ContentsEnumeration) { ContentClassifier nextContentClassifier = new ContentClassifier(nextRule); nextContentClassifier.ClassifyContent(fileInfo); return(true); } else if (nextRule.EnumerationScope == EnumerationScope.FileEnumeration) { FileClassifier nextFileClassifier = new FileClassifier(nextRule); nextFileClassifier.ClassifyFile(fileInfo); return(true); } else { Mq.Error("You've got a misconfigured file ClassifierRule named " + ClassifierRule.RuleName + "."); return(false); } } catch (IOException e) { Mq.Trace(e.ToString()); } catch (Exception e) { Mq.Error("You've got a misconfigured file ClassifierRule named " + ClassifierRule.RuleName + "."); Mq.Trace(e.ToString()); } return(false); case MatchAction.EnterArchive: // do a special looking inside archive files dance using // https://github.com/adamhathcock/sharpcompress // TODO FUUUUUCK throw new NotImplementedException("Haven't implemented walking dir structures inside archives. Prob needs pool queue."); default: Mq.Error("You've got a misconfigured file ClassifierRule named " + ClassifierRule.RuleName + "."); return(false); } }
public FileClassifier(ClassifierRule inRule) { this.ClassifierRule = inRule; }
public ContentClassifier(ClassifierRule inRule) { this.ClassifierRule = inRule; }
public ShareClassifier(ClassifierRule inRule) { this.ClassifierRule = inRule; }