Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support configuration from Rocket.toml #82

Open
hugebubu opened this issue Aug 30, 2020 · 2 comments
Open

Support configuration from Rocket.toml #82

hugebubu opened this issue Aug 30, 2020 · 2 comments

Comments

@hugebubu
Copy link

Is it a good idea to have the configuration in Rocket.toml instead of a separated file?
I will be happy to make a PR :)

@ELD
Copy link
Collaborator

ELD commented Sep 3, 2020

@hugebubu I like this idea and would definitely be open to accepting a PR that accomplishes this. Happy to mentor/advise/assist in any way desired, as well :)

@blackghost1987
Copy link

blackghost1987 commented Mar 25, 2022

Just an FYI for anyone wandering here from Google: This is already possible! (at least with Rocket 0.5.0-rc1) It also works with "Fairing" mode, which was a bit surprising to me, because I thought you can't get the config before attaching the fairing, but you totally can!

The idea is to get the config from a partially built rocket instance, instantiate cors, then attach it to finish building. Here's how to do it:

let partial_rocket = rocket::build()
    .mount(........);
    
let cors_config: CorsOptions = partial_rocket.figment().focus("cors").extract().expect("missing CORS config");
let cors_fairing = cors_config.to_cors().expect("CORS init failed");

let final_rocket = partial_rocket.attach(cors_fairing);

// do the launch and the rest

The TOML deserialization of the CorsOptions struct was a bit tricky, especially because all the externally tagged enums and newtypes, but I've got it working, here's an example:

[default.cors]
allowed_methods = ["Get", "Post", "Put", "Patch"]
allow_credentials = true

[default.cors.allowed_origins.Some]
exact = ["http://localhost:4200", "http://localhost:8080"]

[default.cors.allowed_headers]
Some = [
    ["Authorization"],
    ["Accept"],
    ["content-type"]
]

I'm not sure this is still relevant to you @hugebubu , but I hope this helps someone.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants