{"id":20285453,"url":"https://github.com/mramshaw/red-flag","last_synced_at":"2026-07-15T16:32:49.542Z","repository":{"id":92906074,"uuid":"117391500","full_name":"mramshaw/Red-Flag","owner":"mramshaw","description":"A proof of concept of a red-flagging framework (not to be taken too seriously)","archived":false,"fork":false,"pushed_at":"2018-01-21T18:21:05.000Z","size":31,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-07T09:57:33.738Z","etag":null,"topics":["java","java8","offending-communications","outbound-communications","stream","streaming"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mramshaw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-01-14T01:10:23.000Z","updated_at":"2020-04-02T10:54:42.000Z","dependencies_parsed_at":"2023-04-29T00:55:21.887Z","dependency_job_id":null,"html_url":"https://github.com/mramshaw/Red-Flag","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mramshaw/Red-Flag","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mramshaw%2FRed-Flag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mramshaw%2FRed-Flag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mramshaw%2FRed-Flag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mramshaw%2FRed-Flag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mramshaw","download_url":"https://codeload.github.com/mramshaw/Red-Flag/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mramshaw%2FRed-Flag/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35513409,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-15T02:00:06.706Z","response_time":131,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","java8","offending-communications","outbound-communications","stream","streaming"],"created_at":"2024-11-14T14:26:49.191Z","updated_at":"2026-07-15T16:32:49.516Z","avatar_url":"https://github.com/mramshaw.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Red Flag\n\n![Keyword_Filtering](/images/filter_keywords.svg)\n\nA proof of concept of a red-flagging framework (not to be taken seriously).\n\nAll outbound communications (emails only - for now) will be scanned for certain\nkeywords - which will trigger editorial review of the offending communications.\n\n[This could be extended into a compliance framework with a little effort.\nFor instance, all outgoing communications could be archived (for compliance\npurposes). This archive should of course be searchable. And any offending\ncommunications should be quarantined - and of course NOT be archived.]\n\n## Rationale\n\nCertain discussions are incompatible with a productive workplace.\n\nLikewise, social media (whatever its benefits) is probably also a distraction.\n\n## Simplifications\n\nKeyword scanning is the simplest possible way of carrying out this type of\nprocessing: other more elaborate methods are possible but will be ignored\nfor the purposes of this spike.\n\nIt is possible to imagine many forms of outbound communications, but this\nproject will limit itself to simple emails (ignoring attachments). As the\nmain effort is the framework, the emails to be scanned will be obtained\nfrom static pools.\n\nPersistence, logging, statistics and reporting will be largely ignored. It\nis possible to imagine a persistence framework that would allow for post-hoc\nanalysis but that will not be addressed here. Logging and reporting, to the\nextent that they are present at all, will be present here as console logging.\n\nLikewise, editorial review of offending communications will not be addressed.\n\n## Keywords\n\nThese will be configurable and relatively arbitrary, consisting of `Facebook`,\n`GLaDOS` (sorry Portal fans), `Trump`, `Twitter` and various semantic forms of\nthe word `tweet` (the water-cooler is the place for this type of discussion).\n\n## Chaos Monkeys\n\nIn order to ensure failover and recovery (modelling an unreliable distributed\ncommunications network), one in five of the keyword scans will randomly (and\nsilently) fail.\n\nWhile the intent is to use unreliable off-peak processing (to keep costs down)\nthere needs to be some escalation mechanism to ensure processing takes place in\na timely fashion. Likewise there need to be mechanisms to handle any hardware or\nnetwork failure.\n\n## Requirements\n\nRequires __make__ and __Java 1.8__ to be installed (but could be backported to\nan earlier version of Java).\n\nAlso, __Java 1.9__ (with FLOW) has been released, but many projects - such as\n[Guava](https://github.com/google/guava) and [Scala](http://www.scala-lang.org/) -\nstill seem to rely on Java 1.8. And there are probably better asynchronous\nsolutions available ([Akka](https://akka.io/)? [RxJava](https://github.com/ReactiveX/RxJava)?).\n\n#### To build\n\n    make build\n\n#### To run\n\n    make run\n\n#### To clean\n\n    make clean\n\n## Privacy \u0026 Compliance\n\nFor competitive reasons, most firms may well favour an on-premises solution to a\ncloud-based one. And this bears consideration for legislative reasons as well, as\nmany countries have data residency requirements. Where data access needs to be\naudited, this may well prove to be another consideration to take into account.\n\n## To Do\n\nThis is largely a list of elements that are out of scope of the current exercise.\n\nAs such, these are features that remain to be implemented.\n\n- [ ] Implement Email streaming\n- [x] Implement Email body scanning\n- [ ] Implement Email attachment scanning\n- [ ] Investigate the performance impact of parallel streams\n- [ ] Other forms of communications scanning (possibly machine learning)\n- [ ] Statistical analysis of offending communications\n- [ ] Persistence (format to be determined but probably some type of document store)\n- [ ] Restart of scanning daemon whenever keyword list is changed\n- [ ] Plumbing and triggers for (streaming) email feed\n- [ ] Plumbing and triggers for document feed\n- [ ] Plumbing and triggers for PDF feed\n- [ ] Plumbing and triggers for WORD feed\n- [ ] Plumbing and triggers for editorial review of offending communications\n- [ ] Upgrade to HTTP/2 when it is stable in Java\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmramshaw%2Fred-flag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmramshaw%2Fred-flag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmramshaw%2Fred-flag/lists"}