Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions config/dev.exs
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@ config :erlef, :wild_apricot,
client_secret: "client_secret"

config :erlef, Erlef.Repo,
hostname: System.get_env("DATABASE_HOST", "localhost"),
hostname: System.get_env("DATABASE_HOST", "erlef-db"),
database: "erlef_website_dev",
username: "postgres",
password: "postgres",
username: "erlef_db",
password: "erlef-db-pw",
migration_primary_key: [id: :uuid, type: :binary_id],
migration_timestamps: [type: :utc_datetime],
show_sensitive_data_on_connection_error: true,
Expand Down
34 changes: 34 additions & 0 deletions config/to_json.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
defmodule ToJson do
@moduledoc """
Emit JSON structure representing all of the configuration state
merged from non-runtime values
"""

def doit do
Mix.State.start_link([])
Config.Reader.read_imports!("config/config.exs", env: :dev)
|> case do
{configs, _} -> configs
end
|> custom_encode()
|> IO.puts()
end

def encoder([{_, _} | _] = value, state) do
:json.encode_key_value_list(value, state)
end
def encoder(tup, state) when is_tuple(tup) do
:json.encode_value(Tuple.to_list(tup), state)
end
def encoder(%Regex{} = re, state) do
:json.encode_value(inspect(re), state)
end
def encoder(%DateTime{} = val, state) do
:json.encode_value(DateTime.to_iso8601(val), state)
end
def encoder(other, state) do
:json.encode_value(other, state)
end
def custom_encode(value),
do: :json.encode(value, &encoder/2)
end
3 changes: 3 additions & 0 deletions lib/erlef_web/plugs/plug_attack.ex
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ defmodule ErlefWeb.Plug.Attack do
rule "allow local", %{remote_ip: {127, 0, 0, 1}} = conn do
allow(conn)
end
rule "allow local", %{remote_ip: {192, 168, _, _}} = conn do
allow(conn)
end
end

rule "throttle by ip", %{path_info: ["slack-invite" | _rest]} = conn do
Expand Down
3 changes: 2 additions & 1 deletion mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ defmodule Erlef.MixProject do
name: "Erlef",
source_url: "https://github.com/erlef/website",
homepage_url: "https://erlef.org/",
docs: docs()
docs: docs(),
listeners: [Phoenix.CodeReloader],
]
end

Expand Down
46 changes: 46 additions & 0 deletions start_db
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
#!/bin/bash

get_repo_vars() {
elixir -r config/to_json.exs -e ToJson.doit \
| jq -r '
.erlef["Elixir.Erlef.Repo"]
| to_entries
| map(select((.value | type) == "string"))
| map(.key="repo_"+.key)
| map(.key+"="+.value)
| .[]
'
}

eval $(get_repo_vars)

test -d tmp_docker || mkdir tmp_docker

cat > tmp_docker/init-01-user-db.sh <<EOF
#!/bin/sh
set -e
psql -v ON_ERROR_STOP=1 --username "postgres" --dbname "postgres" <<-EOSQL
CREATE USER
$repo_username
PASSWORD '$repo_password';

CREATE DATABASE
$repo_database
OWNER $repo_username;
EOSQL

PGPASSWORD=$repo_password psql -v ON_ERROR_STOP=1 --user $repo_username $repo_database < /docker-entrypoint-initdb.d/backup._sql
EOF

chmod +x tmp_docker/init-01-user-db.sh
cp backup.sql tmp_docker/backup._sql

docker network create ${NETWORK:-erlef}

docker run --rm -i \
--name $repo_hostname \
--network ${NETWORK:-erlef} \
--env POSTGRES_PASSWORD=postgres-pw \
--mount type=bind,source=$(pwd)/tmp_docker/,target=/docker-entrypoint-initdb.d/ \
--publish 5432:5432 \
postgres:18
24 changes: 24 additions & 0 deletions start_dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/usr/bin/env bash

set -e

docker build --progress plain --tag localhost/erlef-otp:1.18 -f - . <<EOF
FROM docker.io/hexpm/elixir:1.18.4-erlang-27.3.4.1-alpine-3.22.1
USER root
RUN apk update && apk add npm
RUN adduser -S -u $(id -u) elixir
USER elixir
EOF

docker run --rm -it \
--network ${NETWORK:-erlef} \
--mount type=bind,source=$(pwd),target=/src \
--workdir /src \
--name website \
--env MIX_ARCHIVES=/src/.mix \
--env MIX_HOME=/src/.mix \
--env HEX_HOME=/src/.hex \
-p 4000:4000 \
localhost/erlef-otp:1.18

# --user $(id -u):$(id -g) \
Loading