{"id":24427916,"url":"https://github.com/et-nik/fastdl-mm","last_synced_at":"2025-04-24T04:33:36.862Z","repository":{"id":273281620,"uuid":"919107002","full_name":"et-nik/fastdl-mm","owner":"et-nik","description":"FastDL Metamod Plugin","archived":false,"fork":false,"pushed_at":"2025-02-20T16:59:02.000Z","size":68,"stargazers_count":9,"open_issues_count":1,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-18T08:23:46.891Z","etag":null,"topics":["counter-strike","fastdl","goldsrc","half-life1","metamod"],"latest_commit_sha":null,"homepage":"","language":"Go","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/et-nik.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":"2025-01-19T18:11:59.000Z","updated_at":"2025-04-06T22:17:53.000Z","dependencies_parsed_at":"2025-01-20T00:28:43.203Z","dependency_job_id":"5d12cf00-b372-45c8-b744-b143756e1ccd","html_url":"https://github.com/et-nik/fastdl-mm","commit_stats":null,"previous_names":["et-nik/fastdl-mm"],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/et-nik%2Ffastdl-mm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/et-nik%2Ffastdl-mm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/et-nik%2Ffastdl-mm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/et-nik%2Ffastdl-mm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/et-nik","download_url":"https://codeload.github.com/et-nik/fastdl-mm/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250566020,"owners_count":21451223,"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":["counter-strike","fastdl","goldsrc","half-life1","metamod"],"created_at":"2025-01-20T12:13:49.009Z","updated_at":"2025-04-24T04:33:36.810Z","avatar_url":"https://github.com/et-nik.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](fastdl-metamod.png)\n\n[FastDL Metamod plugin](https://github.com/et-nik/fastdl-mm) for GoldSrc ([Half-Life 1](https://github.com/ValveSoftware/halflife), CS 1.6) servers. \nThis plugin allows you to download files from a web server to the client's computer.\n\nThis plugin is safe and does not allow downloading files from forbidden directories or files with forbidden extensions (cfg, ini, ...).\n\nPlugin written with [Metamod-Go](https://github.com/et-nik/metamod-go) library.\n\n## Features\n\n- File caching to reduce the load on the web server.\n- Serve only precached files. If enabled, you can't download files that are not in the precache list.\n- Secure file downloading. The plugin does not allow downloading files from forbidden directories or files with forbidden extensions.\n- Rate limiting. Plugin can block IP addresses that download files too often.\n- IP Blocklist. You can block IP addresses or IP subnet.\n\n## Installation\n\n1. Download the latest release from the [releases page](https://github.com/et-nik/fastdl-mm/releases)\n2. Copy the `fastdl_386.so` file to the `addons/fastdl` directory of your game server\n3. Open `addons/metamod/plugins.ini` file and add the following line:\n```\nlinux addons/fastdl/fastdl_386.so\n```\n\n4. Restart the game server\n\n### Optional\n\n5. Create a `fastdl.yaml` file in the `addons/fastdl` directory and configure the plugin (see [Configuration](#configuration))\n\n## Configuration\n\nYou can configure the plugin using the `fastdl.yaml` file. The file can be located in game directory or in the `addons/fastdl` directory.\n\n### Example\n\n```yaml\n# fastdl.yaml\n\n# The host of the FastDL HTTP server. \n# Leave it empty if you want to use the same IP as the game server.\n# host: \"127.0.0.1\"\n\n# The port of the FastDL HTTP server. \n# Leave it empty if you want to use random port.\n# port: 13080\n\n# The range of random ports for the FastDL HTTP server.\n# If the port is not specified, the plugin will use a random port from this range.\n# If the port is specified, the plugin will use the specified port, ignoring this range.\n#portRange: 40000-50000\n\n# Serve only precached files. \n# If enabled, the plugin will not allow downloading files that are not in the precache list.\nservePrecached: false\n\n# Generate auto index page for directories. \n# It allows to see the list of files in the directory.\nautoIndexEnabled: true\n\n# Cache size for downloaded files. \n# The plugin will delete the oldest files if the cache is full.\ncacheSize: 50MB\n\n# Forbidden files and directories by regular expressions.\nforbiddenRegexp:\n  - mapcycle.*\n  - .*textscheme.*\n    \n# Allowed file extensions. \n# Files with extensions not in this list can not be downloaded.\nallowedExtensions:\n  - bmp\n  - bsp\n  - gif\n  - jpeg\n  - jpg\n  - lmp\n  - lst\n  - mdl\n  - mp3\n  - png\n  - res\n  - spr\n  - tga\n  - txt\n  - wad\n  - wav\n  - zip\n\n# Allowed paths. \n# Files from directories not in this list can not be downloaded.\nallowedPaths:\n  - gfx\n  - maps\n  - media\n  - models\n  - overviews\n  - sound\n  - sprites\n\n# Block IP addresses by single IP, IP subnet or IP range.\n# It supports IPv4 and IPv6.\n#blockListIP:\n#  - 192.0.2.1\n#  - 10.80.0.0/24\n#  - 172.12.132.1-172.12.132.20\n\n# Rate limiting for IP addresses.\nrateLimits:\n\n  - limit: 5\n    period: 1s\n    \n  - limit: 100\n    period: 1m\n```\n\n### Configuration options\n\n#### host\n\nThe host of the FastDL server. This is the IP address. \nLeave it empty if you want to use the same IP as the game server.\n\n#### port\n\nThe port of the FastDL server. Leave it empty if you want to use random port.\n\n#### portRange\n\nThe range of random ports for the FastDL server. \nIf the port is not specified, the plugin will use a random port from this range. \nIf the port is specified, the plugin will use the specified port, ignoring this range.\n\n#### servePrecached\n\nServe only precached files. If enabled, the plugin will not allow downloading \nfiles that are not in the precache list.\n\n#### autoIndexEnabled\n\nIf enabled, the plugin will generate an index file for each directory. \nThe index file will contain a list of files in the directory.\n\n#### cacheSize\n\nThe size of the cache for downloaded files. \nThe plugin will delete the oldest files if the cache is full. \nThe size can be specified in bytes, kilobytes, megabytes, or gigabytes.\nExample values: `50MB`, `1GB`.\n\n#### allowedExtensions\n\nA list of allowed file extensions. \nFiles with extensions not in this list will not be downloaded.\n\n#### forbiddenExtensions\n\nA list of forbidden file extensions. \nFiles with extensions in this list will not be downloaded.\n\n#### allowedPaths\n\nA list of allowed paths. \nFiles from directories not in this list will not be downloaded.\n\n#### forbiddenPaths\n\nA list of forbidden paths. \nFiles from directories in this list will not be downloaded.\n\n#### customDownloadURL\n\nA custom download URL. \nIf specified, the plugin will use this URL to download files.\nExample: `http://example.com:14080/`\n\n#### blockListIP\n\nBlock IP addresses by single IP, IP subnet, or IP range. \nIt supports IPv4 and IPv6.\n\nExample values IPv4:\n- `192.0.2.1`\n- `10.80.0.0/24`\n- `172.12.132.1-172.12.132.20`\n\n\nExample values IPv6:\n- `2001:db8::1`\n- `2001:db8::/32`\n- `2001:db8::1-2001:db8::20`\n\n#### rateLimits\n\nRate limiting for IP addresses. \nYou can specify multiple rate limits.\nThe plugin can block IP addresses that download files too often.\n\nExample 1. Limit 5 requests per second per IP (5 rps per IP):\n```yaml\nrateLimits:\n  - limit: 5\n    period: 1s\n```\n\nExample 2. Limit 100 requests per minute per IP (100 rpm per IP):\n```yaml\nrateLimits:\n  - limit: 100\n    period: 1m\n```\n\nExample 3. Two rate limits. 100 rpm and 5 rps per IP:\n```yaml\nrateLimits:\n  - limit: 5\n    period: 1s\n    \n  - limit: 100\n    period: 1m\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fet-nik%2Ffastdl-mm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fet-nik%2Ffastdl-mm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fet-nik%2Ffastdl-mm/lists"}