{"id":13515158,"url":"https://github.com/domgolonka/foretoken","last_synced_at":"2026-03-12T01:34:27.912Z","repository":{"id":54262119,"uuid":"338199559","full_name":"domgolonka/foretoken","owner":"domgolonka","description":"A blazing fast, highly customizable, modern-day defence tool using (in memory) SQL \u0026 REST/gRPC protocols.","archived":false,"fork":false,"pushed_at":"2024-03-13T22:30:14.000Z","size":1696,"stargazers_count":20,"open_issues_count":3,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-18T21:07:35.570Z","etag":null,"topics":["consul","database","etcdv3","fraud-scores","grpc","grpc-protocols","modern-threats","proxy","regex","regular-expression","restful-api","security","security-automation","security-tools","spam","threat-detection","threats","tor","vpn","zookeeper"],"latest_commit_sha":null,"homepage":"https://foretoken.domgolonka.com/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/domgolonka.png","metadata":{"files":{"readme":"README.md","changelog":"changeme.env","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-12T01:39:49.000Z","updated_at":"2024-08-12T20:10:18.000Z","dependencies_parsed_at":"2022-08-13T10:20:36.327Z","dependency_job_id":"e6908ddf-4fd3-40d8-9a28-b37f423b3823","html_url":"https://github.com/domgolonka/foretoken","commit_stats":null,"previous_names":["domgolonka/threatscraper","domgolonka/threatdefender"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/domgolonka/foretoken","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domgolonka%2Fforetoken","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domgolonka%2Fforetoken/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domgolonka%2Fforetoken/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domgolonka%2Fforetoken/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/domgolonka","download_url":"https://codeload.github.com/domgolonka/foretoken/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/domgolonka%2Fforetoken/sbom","scorecard":{"id":350524,"data":{"date":"2025-08-11","repo":{"name":"github.com/domgolonka/foretoken","commit":"46e8aad4adbc8b37c13e503e77ffe831bbbe1730"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/20 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":4,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Warn: no linked content found","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/main.yml:1","Warn: no topLevel permission defined: .github/workflows/staleissues.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/domgolonka/foretoken/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/domgolonka/foretoken/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/domgolonka/foretoken/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/domgolonka/foretoken/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/domgolonka/foretoken/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/domgolonka/foretoken/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/domgolonka/foretoken/main.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/domgolonka/foretoken/main.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/domgolonka/foretoken/main.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/staleissues.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/domgolonka/foretoken/staleissues.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:16: pin your Docker image by updating alpine:latest to alpine:latest@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":0,"reason":"12 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2024-2574 / GHSA-fmg4-x8pw-hjhg","Warn: Project is vulnerable to: GO-2024-2959 / GHSA-98j2-3j3p-fw2v","Warn: Project is vulnerable to: GO-2025-3845 / GHSA-qx2q-88mx-vhg7","Warn: Project is vulnerable to: GO-2024-2958 / GHSA-3669-72x9-r9p3","Warn: Project is vulnerable to: GO-2023-2402 / GHSA-45x7-px36-x8w8","Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2024-2687 / GHSA-4v7x-pqxf-cx7m","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw","Warn: Project is vulnerable to: GO-2024-2611 / GHSA-8r3f-844c-mc37"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T08:11:50.993Z","repository_id":54262119,"created_at":"2025-08-18T08:11:50.994Z","updated_at":"2025-08-18T08:11:50.994Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30411967,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T00:40:14.898Z","status":"ssl_error","status_checked_at":"2026-03-12T00:40:08.439Z","response_time":84,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["consul","database","etcdv3","fraud-scores","grpc","grpc-protocols","modern-threats","proxy","regex","regular-expression","restful-api","security","security-automation","security-tools","spam","threat-detection","threats","tor","vpn","zookeeper"],"created_at":"2024-08-01T05:01:06.938Z","updated_at":"2026-03-12T01:34:27.872Z","avatar_url":"https://github.com/domgolonka.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e \n  \u003cimg src=\"assets/img.png\" width=\"300\" height=\"300\" alt=\"Foretoken\" /\u003e\u003c/p\u003e\n  \u003ch2 align=\"center\"\u003eForetoken\u003c/h2\u003e\n  \u003cp align=\"center\"\u003eA blazing fast, highly customizable, modern-day defence tool using (in memory) SQL \u0026 REST/gRPC protocols.\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/domgolonka/foretoken/issues/new/choose\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/domgolonka/foretoken/issues/new/choose\"\u003eRequest Feature\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://foretoken.domgolonka.com\"\u003ehttps://foretoken.domgolonka.com\u003c/a\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eLoved the project? Please consider donating to the bitcoin address below:\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"assets/bitcoinaddress.png\" alt=\"3Gn3URoFijqx2keY1fAfSpf8kZge5MBDGM\" height=\"300\" width=\"300\" border=\"0\" /\u003e \u003c/p\u003e\n\n\n## About\n\nForetoken is a tool to scrape and defend against potential dangerous threats faced on the internet. It aims to be a\nhighly customizable tools for companies and individuals to use to counter threats.\n\n### Features\n\n- **Emails** (Rest/gRPC)\n    - Disposable\n    - Generic\n    - Free\n    - Spam\n- **IPs** (Rest/gRPC)\n    - VPN\n    - Spam\n    - Proxy\n    - Tor\n- **Score** (Rest/gRPC)\n    - IP [(0 to 100)](#score)\n    - Email [(0 to 100)](#score)\n- **Database**\n    - SQLite\n    - PostgreSQL\n- **[Editable Sources](#source)**\n    - You can edit all sources\n\n# Usage\n\n## Migrate\n\n**If using NON-MEMORY SQLITE or PostgreSQL, DO THIS BEFORE YOU RUN**, You need to migrate the database:\n\n`make migrate`\n\n## How to run\n\nTo run it on your local computer:\n\n    git clone https://github.com/domgolonka/foretoken\n    cd ./foretoken\n    make build \u0026\u0026 ./bin/foretoken\n\nThe default config file is `config.yml`. \nIf you want to run it with a different config file (or add your own).\n\n\n`git clone https://github.com/domgolonka/foretoken`\n`make build` (make sure to build it first)\n\n`./bin/foretoken --config=/PATH/TO/CONFIG`\n\nexample:\n`./bin/foretoken --config=./config.prod.yml`\n\n## Docker\n\nYou can run it in docker, locally:\n\n```docker build -t foretoken .```\n\nOnce the image is built, Foretoken can be invoked by running the following:\n\n```docker run --rm -t -p 8080:8080 foretoken ```\n\nOr run Docker from our repo:\n\n    docker run -d -p 8080:8080 domgolonka/foretoken\n\nor with a custom config file:\n\n```docker run -d -p 8080:8080 domgolonka/foretoken --config=config.yml```\n\n# Configs\n\nAll configurations are in the config files in the directory \"config\". You can add your own environment variables here.\n\n## External APIs\n\nThe application is improved if you sign up for external APIs. Leaked is paid, but all other services are free to sign up!\n\n- [haveibeenpwned.com](https://haveibeenpwned.com/) - Check if email/password is leaked.\n- [maxmind.com](https://www.maxmind.com/en/home) - IP Geolocation\n- [ip2location.com](https://www.ip2location.com/) - IP Geolocation\n\nChange the file `changeme.env` to `.env` and save any External API Keys.\n\n\n    PWNEDKEY=\n    IP2LOCATION=\n    MAXMIND=\n\nFor full configuration examples, check out [https://foretoken.domgolonka.com](https://foretoken.domgolonka.com)\n\n## Change the databases\n\nAt this moment, Foretoken only supports SQLite and PostgreSQL. You can change the `databasename` field with\neither `postgresql` or `sqlite3`\n\nBy Default, the SQLite driver is set to \"in memory\". To use a file, you need to\nspecify that the `host` to a `.sqlite3` extension, example: `YOURNAME.sqlite3`. This will create a\nnew SQLite file  in the root directory.\n\nFor Postgresql, I would advise using a quick read/write database like [timescale](https://www.timescale.com/).\n\n***PostgreSQL is not yet tested***\n\n## Score\n\nThe overall Fraud Score of the email and IP's reputation and recent behavior across the threat network. Fraud Scores \u003e=\n75 are suspicious, but not necessarily fraudulent.\n\nThis tool saves those threats on multiple different databases and uses REST API \u0026 gRPC to output data.\n\n## Source\n\nAll sources are available in the `./resource` directory. You can edit and the resources. They files get checked once a\nday by the different modules.\n\n### Regular Expressions\n\nRegex expressions are saved in the `./resource/expressions.json` file in JSON format.\n\nEach regex looks like this:\n\n    {\n    \"name\": \"ipv4\",\n    \"expression\": \"^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)).*\",\n    \"type\": \"ipv4\"\n    },\n\n_**Name**:_  The UNIQUE name of the regular expression. \n\n_**Expression**:_ The regex \n\n_**Type:**_ The type of expression. For IPs, it is\nusually is a ipv4 or ipv6. For IP proxy, its http, https, sock4, sock5.\n\n\nThe files are stored in the `./resource` directory and start with `ip_` such as `ip_tor` for tor.\n\nYou can add sources by adding a new file to `./resource` directory and updating the `config.yml` file:\n\n    ### Resource files\n    resource:\n      emaildisposallist: [ \"email_disposable\" ]\n      emailfreelist: [ \"email_free\" ]\n      emailspamlist: [ \"email_spam\" ]\n      ipvpnlist: [ \"ip_vpn\" ]\n      ipopenvpnlist: [ \"ip_openvpn\" ]\n      iptorlist: [ \"ip_tor\" ]\n      ipproxylist: [ \"ip_proxy\" ]\n      ipspamlist: [ \"ip_spam\" ]\n      expressionlist: [ \"expressions\" ]\n\n\n# APIs\n\nREST API \u0026 gRPC is enabled. For more API examples: [https://foretoken.domgolonka.com](https://foretoken.domgolonka.com)\n\n## gRPC\n\nThe default gRPC port is 8082 (you can change in the config)\n\n## REST API\n\nThe REST API to the example app is described below.\n\n### Rate Limiting\n\nYou can enable the rate limiter for REST API in the `config.yml` file.\n\n    ratelimit:\n      enabled: true\n      max: 20 \n      expiration: 30 \n\n`Max` number of recent connections during `Duration` seconds before sending a 429 response\n \n`Expiration` is the time on how long to keep records of requests in memory per minute\n\n#### Request\n\n`GET /health`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/health\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Thu, 18 Feb 2021 04:56:45 GMT\n    Content-Type: application/json\n    Content-Length: 13\n    \n    {\"http\":true}\n\n#### Request\n\n`GET /list/ip/proxy`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/list/ip/proxy\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Content-Type: application/json\n    Date: Fri, 12 Feb 2021 03:21:38 GMT\n    Transfer-Encoding: chunked\n    \n    {\"result\":[{\"ID\":1,\"URL\":\"103.228.xxx.xxx\",\"Type\":\"ipv4\",\"CreatedAt\":\"2020-12-04T19:12:05.693099-05:00\",\"UpdatedAt\":\"2020-12-04T19:12:05.693099-05:00\",\"DeletedAt\":null},{\"ID\":2,\"URL\":\"196.3.xxx.xxx\",\"Type\":\"ipv4\",\"CreatedAt\":\"2020-12-04T19:12:05.69557-05:00\",\"UpdatedAt\":\"2020-12-04T19:12:05.69557-05:00\",\"DeletedAt\":null},{\"ID\":3,\"URL\":\"165.227.xxx.xxx\",\"Type\":\"ipv4\",\"CreatedAt\":\"2020-12-04T19:12:05.696224-05:00\",\"UpdatedAt\":\"2020-12-04T19:12:05.696224-05:00\",\"DeletedAt\":null},{\"ID\":4,\"URL\":\"117.197.xxx.xxx\",\"Type\":\"ipv4\",\"CreatedAt\":\"2020-12-04T19:12:05.696876-05:00\",\"UpdatedAt\":\"2020-12-04T19:12:05.696876-05:00\",\"DeletedAt\":null},{\"ID\":5,\"URL\":\"180.183.xxx.xxx\",\"Type\":\"ipv4\",\"CreatedAt\":\"2020-12-04T19:12:05.697515-05:00\",\"UpdatedAt\":\"2020-12-04T19:12:05.697515-05:00\",\"DeletedAt\":null},{\"ID\":6,\"URL\":\"159.192.xxx.xxx:8080\",\"Type\":\"ipv4\",\"CreatedAt\":\"2020-12-04T19:12:05.698074-05:00\",\"UpdatedAt\":\"2020-12-04T19:12:05.698074-05:00\",\"DeletedAt\":null},{\"ID\":7,\"URL\":\"185.28.xxx.xxx\",\"Type\":\"ipv4\",\"\n\n#### Request\n\n`GET /list/ip/spam`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/list/ip/spam\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Thu, 18 Feb 2021 04:57:33 GMT\n    Content-Type: text/plain; charset=utf-8\n    Content-Length: 34952\n    \n    168.0.xxx.0/22\n    202.49.xxx.0/24\n\n#### Request\n\n`GET /list/ip/vpn`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/list/ip/vpn\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Fri, 12 Feb 2021 03:29:54 GMT\n    Content-Type: text/plain; charset=utf-8\n    Transfer-Encoding: chunked\n\n    yul-c14.xxx.com\n    lim-c04.xxx.com\n    bhx-c05.xxx.com\n\n#### Request\n\n`GET /list/ip/tor`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/list/ip/tor\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Thu, 18 Feb 2021 04:58:18 GMT\n    Content-Type: text/plain; charset=utf-8\n    Content-Length: 23253\n    \n    176.10.xxx.xxx\n    54.37.xxx.xxx\n    109.70.xxx.xxx\n\n#### Request\n\n`GET /list/email/disposal`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/list/email/disposal\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Thu, 18 Feb 2021 04:58:18 GMT\n    Content-Type: text/plain; charset=utf-8\n    Content-Length: xxx\n\n    xxx.cc\n    xxx.com\n    xxx.ca\n\n#### Request\n\n`GET /list/email/generic`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/list/email/generic\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Thu, 18 Feb 2021 04:59:38 GMT\n    Content-Type: text/plain; charset=utf-8\n    Content-Length: xxxx\n    \n    xxx@\n    xxx@\n    xxx@\n\n#### Request\n\n`GET /list/email/spam`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/list/email/spam\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Thu, 18 Feb 2021 04:59:38 GMT\n    Content-Type: text/plain; charset=utf-8\n    Content-Length: xxxx\n\n    xxx.cc\n    xxx.com\n    xxx.ca\n\n#### Request\n\n`GET /list/email/free`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/list/email/free\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Thu, 18 Feb 2021 04:59:38 GMT\n    Content-Type: text/plain; charset=utf-8\n    Content-Length: xxxx\n\n    xxx.cc\n    xxx.com\n    xxx.ca\n\n#### Request\n\n`GET /score/email/youremail@gmail.com`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/score/email/youremail@gmail.com\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Fri, 12 Feb 2021 03:29:54 GMT\n    Content-Type: text/plain; charset=utf-8\n    Transfer-Encoding: chunked\n\n    10\n\n#### Request\n\n`GET /score/ip/127.0.0.1`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/score/ip/127.0.0.1\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Fri, 12 Feb 2021 03:29:54 GMT\n    Content-Type: text/plain; charset=utf-8\n    Transfer-Encoding: chunked\n\n    0\n\n#### Request\n\n`GET /validate/email/youremail@gmail.com`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/validate/email/youremail@gmail.com\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Fri, 12 Feb 2021 03:29:54 GMT\n    Content-Type: text/json; charset=utf-8\n    Transfer-Encoding: chunked\n\n    {\n    \"valid\": true\n    }\n\n#### Request\n\n`GET /email/youremail@gmail.com`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/email/youremail@gmail.com\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Fri, 12 Feb 2021 03:29:54 GMT\n    Content-Type: text/json; charset=utf-8\n    Transfer-Encoding: chunked\n\n    {\n    \"valid\": true,\n    \"disposable\": false,\n    \"recent_spam\": false,\n    \"free\": false,\n    \"leaked\": false,\n    \"generic\": false,\n    \"score\": 0,\n    \"domain\": {\n        \"created_at\": \"1995-08-13T04:00:00Z\",\n        \"expiration_date\": \"2021-08-12T04:00:00Z\"\n        }\n    }\n\n#### Request\n\n`GET /ip/127.0.0.1`\n\n    curl -i -H 'Accept: application/json' http://localhost:8080/ip/127.0.0.1\n\n#### Response\n\n    HTTP/1.1 200 OK\n    Date: Fri, 12 Feb 2021 03:29:54 GMT\n    Content-Type: text/json; charset=utf-8\n    Transfer-Encoding: chunked\n\n    {\n    \"success\": false,\n    \"proxy\": false,\n    \"ISP\": \"\",\n    \"organization\": \"\",\n    \"ASN\": 0,\n    \"host\": \"\",\n    \"country_code\": \"\",\n    \"city\": \"\",\n    \"region\": \"\",\n    \"is_crawler\": false,\n    \"connection_type\": \"\",\n    \"latitude\": 0,\n    \"longitude\": 0,\n    \"timezone\": \"\",\n    \"vpn\": false,\n    \"tor\": false,\n    \"recent_abuse\": false,\n    \"abuse_velocity\": \"\",\n    \"bot_status\": false,\n    \"mobile\": false,\n    \"score\": 0,\n    \"operating_system\": \"\",\n    \"browser\": \"\",\n    \"device_model\": \"\",\n    \"device_brand\": \"\"\n    }\n\n# Service Discovery\n\nForetoken supports etcd3, zookeeper, and consul as a registry.\n\nAll service discovery configurations are stored in the `config.yml` file:\n\n    servicediscovery:\n      service: \"\"\n      nodeid: \"\"\n      endpoint: \"\"\n\n- Service: The viable options are `consul`, `etc3` and `zookeeper`\n- Nodeid: A name for the grpc nodeid\n- endpoint: An address for the service such as zookeeper: `10.0.101.68:2189`, etcd: `http://10.0.101.68:2379`  or consul: `http://10.0.101.68:8500`\n\n# Metrics\n\n## Prometheus\n\nPrometheus is enabled. Following metrices are available by default:\n\n    http_requests_total\n    http_request_duration_seconds\n    http_requests_in_progress_total\n\n## Work in progress\n\nLots of features are being worked on.\n\n## Roadmap\n\nI would like a discussion going on the potential expansion of the tool.\n\nI would like this tool to detect all modern threats.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdomgolonka%2Fforetoken","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdomgolonka%2Fforetoken","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdomgolonka%2Fforetoken/lists"}