{"id":17347889,"url":"https://github.com/tuokri/spoofspy","last_synced_at":"2026-04-09T11:41:26.497Z","repository":{"id":215247894,"uuid":"658687961","full_name":"tuokri/spoofspy","owner":"tuokri","description":"Experimental app for detecting and displaying spoofed and \"redirect\" servers on Steam.","archived":false,"fork":false,"pushed_at":"2025-02-12T11:59:20.000Z","size":423,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-12T12:54:26.315Z","etag":null,"topics":["celery","fastapi","postgresql","psycopg3","redis","sqlalchemy","steam","svelte","timescaledb"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tuokri.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2023-06-26T09:42:25.000Z","updated_at":"2025-02-12T11:57:34.000Z","dependencies_parsed_at":"2024-05-20T12:52:34.594Z","dependency_job_id":"69708d53-20d3-4dcc-a144-41a03e56c46d","html_url":"https://github.com/tuokri/spoofspy","commit_stats":null,"previous_names":["tuokri/spoofspy"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuokri%2Fspoofspy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuokri%2Fspoofspy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuokri%2Fspoofspy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tuokri%2Fspoofspy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tuokri","download_url":"https://codeload.github.com/tuokri/spoofspy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245832754,"owners_count":20679704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["celery","fastapi","postgresql","psycopg3","redis","sqlalchemy","steam","svelte","timescaledb"],"created_at":"2024-10-15T16:50:29.583Z","updated_at":"2025-12-30T23:22:51.124Z","avatar_url":"https://github.com/tuokri.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# spoofspy\n\nExperimental app for detecting and displaying spoofed/redirect servers on Steam.\n\nCalculates a trust score based on multiple criteria to determine\na rolling average that indicates which servers are trustworthy i.e.\nreal servers vs. fake severs with low trust score that often have spoofed\ninformation such as player counts.\n\nTrust score evaluation currently supported on the following games:\n\n- Rising Storm 2: Vietnam\n\n## Technical details\n\nThe backend core is implemented as multiple Celery jobs and a\nPostgreSQL+TimescaleDB cluster that perform the following actions:\n\n1. A periodic job request Steam Web API\n   [(IGameServersService/GetServerList)](https://steamapi.xpaw.me/#IGameServersService/GetServerList)\n   for a list of dedicated servers\n   based on some query criteria stored in the database. The result of this\n   query is stored in the database.\n2. For each server discovered, an individual Celery job is started to\n   perform A2S_INFO, A2S_RULES and A2S_PLAYERS queries. The results of these\n   queries are stored in the database as timeseries.\n3. A periodic Celery job calculates the trust scores for the servers\n   based on the above queries. The heuristic trust score algorithm details\n   can be seen [here](spoofspy/heuristics/trust.py).\n\nData model defined in detail for Timescale\n[here](spoofspy/db/timescale.sql) and for SQLAlchemy\n[here](spoofspy/db/models.py).\n\n## Future improvements\n\n- Public web GUI\n    - Currently only has backend functionality\n      and private APIs for development and testing\n\n## TODO\n\n- Check this example and adapt it for setting kernel options as root\n  before running the actual app as non-root:\n  https://community.fly.io/t/cant-change-permissions-on-run-directory/1154/2\n\n- Import `_version.py` to make it available in releases.\n    - Actually, consider if we want to do this? There seem to\n      be many opinions on whether having a __version__ attribute\n      is the right way to do it.\n\n- Run jobs more frequently for low score servers. Fewer jobs can be ran for\n  servers with a history of high trust score.\n\n# License\n\n```\nCopyright (C) 2023-2024  Tuomo Kriikkula\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as published\nby the Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License\nalong with this program.  If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftuokri%2Fspoofspy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftuokri%2Fspoofspy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftuokri%2Fspoofspy/lists"}