···8585 let db_process_name = process.new_name("db_conn")
8686 let registry_name = process.new_name("registry")
87878888- let assert Ok(config) = app.read_connection_uri(db_process_name)
8888+ let env = case envoy.get("SIGO_PROD") {
8989+ Error(_) -> context.Dev
9090+ Ok(_) -> context.Production
9191+ }
9292+9393+ let assert Ok(config) = app.read_connection_url(db_process_name, env)
8994 let assert Ok(secret_key_base) = envoy.get("COOKIE_TOKEN")
90959196 let db = pog.named_connection(db_process_name)
···96101 db:,
97102 registry_name:,
98103 secret_key_base:,
104104+ env:,
99105 )
100106}
+16-6
src/app.gleam
···3131pub fn main() -> Nil {
3232 web.configure_logger()
33333434+ // Enviroment where the code is running on
3535+ let env = case envoy.get("SIGO_PROD") {
3636+ Error(_) -> context.Dev
3737+ Ok(_) -> context.Production
3838+ }
3939+3440 // NAMES ---------------------------------------------------------------------
3541 // Setup registry process name
3642 let registry_name = process.new_name("registry")
···4450 as " Cookie secret key is available"
45514652 // Postgresql connection URI
4747- let assert Ok(pog_config) = read_connection_uri(db_process_name)
5353+ let assert Ok(pog_config) = read_connection_url(db_process_name, env)
4854 as " DataBase connection URI is available"
49555056 // Pass the application context to the router
···5460 db: pog.named_connection(db_process_name),
5561 registry_name:,
5662 secret_key_base:,
6363+ env:,
5764 )
58655966 let wisp_handler = http_router.handle_request(_, ctx)
···75827683/// Read the `DATABASE_URL` environment variable and then
7784/// build the `pog.Config` from that database URI.
7878-pub fn read_connection_uri(
8585+///
8686+/// Disables SSL during development
8787+pub fn read_connection_url(
7988 name: process.Name(pog.Message),
8989+ env: context.Enviroment,
8090) -> Result(pog.Config, Nil) {
8191 // Remember to set the enviroment variable before running the app
8292 use postgres_url <- result.try(envoy.get("DATABASE_URL"))
83938484- // Disable SSL when not in production
8585- case envoy.get("SIGO_PROD") {
8686- Error(_) -> pog.url_config(name, postgres_url)
8787- Ok(_) -> {
9494+ // Disable SSL when not in production
9595+ case env {
9696+ context.Dev -> pog.url_config(name, postgres_url)
9797+ context.Production -> {
8898 use config <- result.map(pog.url_config(name, postgres_url))
8999 pog.ssl(config, pog.SslVerified)
90100 }
+28-19
src/app/web.gleam
···17171818import app/web/context
1919import cors_builder as cors
2020-import envoy
2120import gleam/dynamic/decode
2221import gleam/http
2322import gleam/json
···3231pub fn middleware(
3332 request req: wisp.Request,
3433 context ctx: context.Context,
3535- next handle_request: fn(wisp.Request) -> wisp.Response,
3434+ next handler: fn(wisp.Request) -> wisp.Response,
3635) -> wisp.Response {
3736 let path = "/static"
3837 let request = wisp.method_override(req)
···4039 use <- wisp.log_request(request)
4140 use <- wisp.rescue_crashes()
4241 use request <- wisp.handle_head(request)
4343- use request <- cors.wisp_middleware(request, cors_config())
4242+ use request <- setup_cors(request, ctx)
44434544 use <- wisp.serve_static(request, under: path, from: ctx.static_directory)
4646- handle_request(request)
4545+ handler(request)
4646+}
4747+4848+/// Disable CORS during development
4949+fn setup_cors(
5050+ request request: wisp.Request,
5151+ ctx ctx: context.Context,
5252+ next handler: fn(wisp.Request) -> wisp.Response,
5353+) -> wisp.Response {
5454+ case ctx.env {
5555+ context.Dev -> handler(request)
5656+ context.Production -> {
5757+ use request <- cors.wisp_middleware(request, cors_config())
5858+ handler(request)
5959+ }
6060+ }
4761}
48624963/// Configure the Erlang logger
···6579 priv_directory <> "/log"
6680}
67816868-/// Disable CORS when not in production
6982fn cors_config() -> cors.Cors {
7070- case envoy.get("SIGO_PROD") {
7171- Error(_) -> cors.new()
7272- Ok(_) ->
7373- cors.new()
7474- |> cors.allow_origin("https://sigo.cbpm.vercel.app")
7575- |> cors.allow_method(http.Get)
7676- |> cors.allow_method(http.Post)
7777- |> cors.allow_method(http.Put)
7878- |> cors.allow_method(http.Delete)
7979- |> cors.allow_header("authorization")
8080- |> cors.allow_header("content-type")
8181- |> cors.allow_header("origin")
8282- |> cors.allow_credentials()
8383- }
8383+ cors.new()
8484+ |> cors.allow_origin("https://sigo.cbpm.vercel.app")
8585+ |> cors.allow_method(http.Get)
8686+ |> cors.allow_method(http.Post)
8787+ |> cors.allow_method(http.Put)
8888+ |> cors.allow_method(http.Delete)
8989+ |> cors.allow_header("authorization")
9090+ |> cors.allow_header("content-type")
9191+ |> cors.allow_header("origin")
9292+ |> cors.allow_credentials()
8493}
85948695pub fn handle_decode_error(
+9
src/app/web/context.gleam
···1111 db: pog.Connection,
1212 secret_key_base: String,
1313 registry_name: process.Name(group_registry.Message(msg.Msg)),
1414+ env: Enviroment,
1415 )
1516}
1717+1818+/// Enviroment where the code is running on
1919+pub type Enviroment {
2020+ /// Code is running locally
2121+ Dev
2222+ /// Code is running in production
2323+ Production
2424+}
+7-1
test/app_test.gleam
···2222 let db_process_name = process.new_name("db_conn")
2323 let registry_name = process.new_name("registry")
24242525- let assert Ok(config) = app.read_connection_uri(db_process_name)
2525+ let env = case envoy.get("SIGO_PROD") {
2626+ Error(_) -> context.Dev
2727+ Ok(_) -> context.Production
2828+ }
2929+3030+ let assert Ok(config) = app.read_connection_url(db_process_name, env)
2631 let assert Ok(secret_key_base) = envoy.get("COOKIE_TOKEN")
27322833 let db = pog.named_connection(db_process_name)
···3338 db:,
3439 registry_name:,
3540 secret_key_base:,
4141+ env:,
3642 )
3743 })
3844}