Skip to content

A proxy & cache for files on a content delivery network like the Discord CDN

License

Notifications You must be signed in to change notification settings

merlinfuchs/cdproxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CDProxy

A proxy & cache for files on a content delivery network like the Discord CDN

What?

CDProxy lets you submit URLs of hosted files and returns an URL that you can use to download that file at a later point. If the file is smaller than the set max size CDProxy will try to download it and store it on an SFTP server. When an expiry is set the stored file will be deleted once it has expired. If no stored file is found, CDProxy will try to download from the original URL on the fly.

Why?

In September 2023 Discord has announced to introduce authentication to their CDN used for file uploads on the platform. This means that CDN URLs from Discord will expire 24 hours (the timing may change) after it has been obtained from Discord.

Some services heavily rely on storing these URLs and accessing at a later point. CDProxy can help mitigating the affects of this change by caching files for an extended period.

Installation

go install github.com/merlinfuchs/cdproxy@latest

Configuration

CDProxy will look for a file called config.yaml containing configuration.

host: 127.0.0.1
port: 8080
public_url: http://localhost:8080 # Where CDProxy is exposed, used to generate the URL for the file

db_file_Name: cdproxy.db
download_timeout: 30 # timeout in seconds for downloading from the original url

sftp_host: localhost:22
sftp_user: ""
sftp_password: ""
brotli_compression_level: 7

default_max_size: 104857600 # 100MB, in bytes
default_expiry: 0 # in seconds, no expiry by default
default_original_expiry: 86400 # when the original url will become invalid, default 24 hours

max_queue_size: 100 # Number of files that can wait to be processed in the queue
max_workers: 8 # Number of files that can be processed at once, default number of CPU cores

Usage

1. Start the server

cdproxy

2. Submit a file

POST /submit
{
  "original_url": "https://cdn.discordapp.com/...",
  "original_expires_at": null, // ISO timestamp when the original url will expire (optiona, defaults to config value)
  "expires_at": null, // ISO timestamp when the file expires (optional, defaults to config value)
  "size": 42, // If you already know the size of the file you can set it here, this will prevent CDProxy from having to download it at all if it's too big (optional)
  "max_size": 1000, // If the size of the file is lower than this it will be stored (optional, defaults to config value)
  "metadata": { "user_id": "123" }, // Any metadata for the file (optional)
  "wait": false // Whether to wait for the file to be processed or return instantly (optional)
}

3. Download file

GET /download/<file_id>

4. Profit

About

A proxy & cache for files on a content delivery network like the Discord CDN

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages