diff --git a/.drone.yml b/.drone.yml index 98a7065..3854ed6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,6 +1,6 @@ kind: pipeline type: docker -name: lokal +name: memex steps: - name: restore-cache @@ -18,7 +18,7 @@ steps: - name: test image: bitwalker/alpine-elixir-phoenix:1.13 environment: - TEST_DATABASE_URL: ecto://postgres:postgres@database/lokal_test + TEST_DATABASE_URL: ecto://postgres:postgres@database/memex_test HOST: testing.example.tld commands: - mix local.rebar --force @@ -30,7 +30,7 @@ steps: - name: build and publish stable image: plugins/docker settings: - repo: shibaobun/lokal + repo: shibaobun/memex username: from_secret: docker_username password: @@ -43,7 +43,7 @@ steps: - name: build and publish tagged version image: plugins/docker settings: - repo: shibaobun/lokal + repo: shibaobun/memex username: from_secret: docker_username password: diff --git a/.gitignore b/.gitignore index 4f6ce1e..e2c2b69 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,7 @@ erl_crash.dump *.ez # Ignore package tarball (built via "mix hex.build"). -lokal-*.tar +memex-*.tar # If NPM crashes, it generates a log, let's ignore it too. npm-debug.log diff --git a/Dockerfile b/Dockerfile index 80d8b66..915c983 100644 --- a/Dockerfile +++ b/Dockerfile @@ -45,10 +45,10 @@ RUN chown nobody:nobody /app USER nobody:nobody -COPY --from=build --chown=nobody:nobody /app/_build/prod/rel/lokal ./ +COPY --from=build --chown=nobody:nobody /app/_build/prod/rel/memex ./ COPY --from=build --chown=nobody:nobody /app/priv /app/priv RUN chmod +x /app/priv/random.sh ENV HOME=/app -CMD ["bin/lokal", "start"] +CMD ["bin/memex", "start"] diff --git a/assets/js/app.js b/assets/js/app.js index 29c1d06..b220c9f 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -58,7 +58,7 @@ liveSocket.connect() window.liveSocket = liveSocket // Copy to clipboard -window.addEventListener('lokal:clipcopy', (event) => { +window.addEventListener('memex:clipcopy', (event) => { if ('clipboard' in navigator) { const text = event.target.textContent navigator.clipboard.writeText(text) diff --git a/assets/tailwind.config.js b/assets/tailwind.config.js index 460f63c..2c9a0d7 100644 --- a/assets/tailwind.config.js +++ b/assets/tailwind.config.js @@ -9,7 +9,7 @@ module.exports = { colors: { transparent: 'transparent', current: 'currentColor', - primary: colors.indigo, + primary: colors.black, black: colors.black, white: colors.white, gray: colors.neutral, diff --git a/config/config.exs b/config/config.exs index c75f9ce..9992795 100644 --- a/config/config.exs +++ b/config/config.exs @@ -7,23 +7,23 @@ # General application configuration import Config -config :lokal, - ecto_repos: [Lokal.Repo], +config :memex, + ecto_repos: [Memex.Repo], generators: [binary_id: true] # Configures the endpoint -config :lokal, LokalWeb.Endpoint, +config :memex, MemexWeb.Endpoint, url: [scheme: "https", host: System.get_env("HOST") || "localhost", port: "443"], http: [port: String.to_integer(System.get_env("PORT") || "4000")], secret_key_base: "KH59P0iZixX5gP/u+zkxxG8vAAj6vgt0YqnwEB5JP5K+E567SsqkCz69uWShjE7I", - render_errors: [view: LokalWeb.ErrorView, accepts: ~w(html json), layout: false], - pubsub_server: Lokal.PubSub, + render_errors: [view: MemexWeb.ErrorView, accepts: ~w(html json), layout: false], + pubsub_server: Memex.PubSub, live_view: [signing_salt: "zOLgd3lr"], registration: System.get_env("REGISTRATION") || "invite" -config :lokal, Lokal.Application, automigrate: false +config :memex, Memex.Application, automigrate: false -config :lokal, :generators, +config :memex, :generators, migration: true, binary_id: true, sample_binary_id: "11111111-1111-1111-1111-111111111111" @@ -35,7 +35,7 @@ config :lokal, :generators, # # For production it's recommended to configure a different adapter # at the `config/runtime.exs`. -config :lokal, Lokal.Mailer, adapter: Swoosh.Adapters.Local +config :memex, Memex.Mailer, adapter: Swoosh.Adapters.Local # Swoosh API client is needed for adapters other than SMTP. config :swoosh, :api_client, false @@ -44,8 +44,8 @@ config :swoosh, :api_client, false config :gettext, :default_locale, "en_US" # Configure Oban -config :lokal, Oban, - repo: Lokal.Repo, +config :memex, Oban, + repo: Memex.Repo, plugins: [Oban.Plugins.Pruner], queues: [default: 10, mailers: 20] diff --git a/config/dev.exs b/config/dev.exs index e454a92..8b325c0 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -1,7 +1,7 @@ import Config # Configure your database -config :lokal, Lokal.Repo, +config :memex, Memex.Repo, show_sensitive_data_on_connection_error: true, pool_size: 10 @@ -11,7 +11,7 @@ config :lokal, Lokal.Repo, # The watchers configuration can be used to run external # watchers to your application. For example, we use it # with esbuild to bundle .js and .css sources. -config :lokal, LokalWeb.Endpoint, +config :memex, MemexWeb.Endpoint, check_origin: false, code_reloader: true, debug_errors: true, @@ -54,13 +54,13 @@ config :lokal, LokalWeb.Endpoint, # different ports. # Watch static and templates for browser reloading. -config :lokal, LokalWeb.Endpoint, +config :memex, MemexWeb.Endpoint, live_reload: [ patterns: [ ~r"priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$", ~r"priv/gettext/.*(po)$", - ~r"lib/lokal_web/(live|views)/.*(ex)$", - ~r"lib/lokal_web/templates/.*(eex)$" + ~r"lib/memex_web/(live|views)/.*(ex)$", + ~r"lib/memex_web/templates/.*(eex)$" ] ] diff --git a/config/prod.exs b/config/prod.exs index 6bdebd1..36fcb4c 100644 --- a/config/prod.exs +++ b/config/prod.exs @@ -9,7 +9,7 @@ import Config # manifest is generated by the `mix phx.digest` task, # which you should run after static files are built and # before starting your production server. -config :lokal, LokalWeb.Endpoint, cache_static_manifest: "priv/static/cache_manifest.json" +config :memex, MemexWeb.Endpoint, cache_static_manifest: "priv/static/cache_manifest.json" # Do not print debug messages in production config :logger, level: :info @@ -19,7 +19,7 @@ config :logger, level: :info # To get SSL working, you will need to add the `https` key # to the previous section and set your `:url` port to 443: # -# config :lokal, LokalWeb.Endpoint, +# config :memex, MemexWeb.Endpoint, # ..., # url: [host: "example.com", port: 443], # https: [ @@ -43,7 +43,7 @@ config :logger, level: :info # We also recommend setting `force_ssl` in your endpoint, ensuring # no data is ever sent via http, always redirecting to https: # -# config :lokal, LokalWeb.Endpoint, +# config :memex, MemexWeb.Endpoint, # force_ssl: [hsts: true] # # Check `Plug.SSL` for all available options in `force_ssl`. diff --git a/config/runtime.exs b/config/runtime.exs index b1532fb..bb4240b 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -9,7 +9,7 @@ import Config # Start the phoenix server if environment is set and running in a release if System.get_env("PHX_SERVER") && System.get_env("RELEASE_NAME") do - config :lokal, LokalWeb.Endpoint, server: true + config :memex, MemexWeb.Endpoint, server: true end # Set default locale @@ -20,28 +20,28 @@ maybe_ipv6 = if System.get_env("ECTO_IPV6") == "true", do: [:inet6], else: [] database_url = if config_env() == :test do System.get_env("TEST_DATABASE_URL") || - "ecto://postgres:postgres@localhost/lokal_test#{System.get_env("MIX_TEST_PARTITION")}" + "ecto://postgres:postgres@localhost/memex_test#{System.get_env("MIX_TEST_PARTITION")}" else System.get_env("DATABASE_URL") || - "ecto://postgres:postgres@lokal-db/lokal" + "ecto://postgres:postgres@memex-db/memex" end host = System.get_env("HOST") || - raise "No hostname set! Must be the domain and tld like `lokal.bubbletea.dev`." + raise "No hostname set! Must be the domain and tld like `memex.bubbletea.dev`." interface = if config_env() in [:dev, :test], do: {0, 0, 0, 0}, else: {0, 0, 0, 0, 0, 0, 0, 0} -config :lokal, Lokal.Repo, +config :memex, Memex.Repo, # ssl: true, url: database_url, pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10"), socket_options: maybe_ipv6 -config :lokal, LokalWeb.Endpoint, +config :memex, MemexWeb.Endpoint, url: [scheme: "https", host: host, port: 443], http: [ # See the documentation on https://hexdocs.pm/plug_cowboy/Plug.Cowboy.html @@ -65,13 +65,13 @@ if config_env() == :prod do You can generate one by calling: mix phx.gen.secret """ - config :lokal, LokalWeb.Endpoint, secret_key_base: secret_key_base + config :memex, MemexWeb.Endpoint, secret_key_base: secret_key_base # Automatically apply migrations - config :lokal, Lokal.Application, automigrate: true + config :memex, Memex.Application, automigrate: true # Set up SMTP settings - config :lokal, Lokal.Mailer, + config :memex, Memex.Mailer, adapter: Swoosh.Adapters.SMTP, relay: System.get_env("SMTP_HOST") || raise("No SMTP_HOST set!"), port: System.get_env("SMTP_PORT") || 587, @@ -79,14 +79,14 @@ if config_env() == :prod do password: System.get_env("SMTP_PASSWORD") || raise("No SMTP_PASSWORD set!"), ssl: System.get_env("SMTP_SSL") == "true", email_from: System.get_env("EMAIL_FROM") || "no-reply@#{System.get_env("HOST")}", - email_name: System.get_env("EMAIL_NAME") || "Lokal" + email_name: System.get_env("EMAIL_NAME") || "Memex" # ## Using releases # # If you are doing OTP releases, you need to instruct Phoenix # to start each relevant endpoint: # - # config :lokal, LokalWeb.Endpoint, server: true + # config :memex, MemexWeb.Endpoint, server: true # # Then you can assemble a release by calling `mix release`. # See `mix help release` for more information. diff --git a/config/test.exs b/config/test.exs index d8fd1d2..d9fad5d 100644 --- a/config/test.exs +++ b/config/test.exs @@ -8,19 +8,19 @@ config :bcrypt_elixir, :log_rounds, 1 # The MIX_TEST_PARTITION environment variable can be used # to provide built-in test partitioning in CI environment. # Run `mix help test` for more information. -config :lokal, Lokal.Repo, +config :memex, Memex.Repo, pool: Ecto.Adapters.SQL.Sandbox, pool_size: 10 # We don't run a server during test. If one is required, # you can enable the server option below. -config :lokal, LokalWeb.Endpoint, +config :memex, MemexWeb.Endpoint, http: [ip: {0, 0, 0, 0}, port: 4002], secret_key_base: "S3qq9QtUdsFtlYej+HTjAVN95uP5i5tf2sPYINWSQfCKJghFj2B1+wTAoljZyHOK", server: false # In test we don't send emails. -config :lokal, Lokal.Mailer, adapter: Swoosh.Adapters.Test +config :memex, Memex.Mailer, adapter: Swoosh.Adapters.Test # Print only warnings and errors during test config :logger, level: :warn @@ -29,4 +29,4 @@ config :logger, level: :warn config :phoenix, :plug_init_mode, :runtime # Disable Oban -config :lokal, Oban, queues: false, plugins: false +config :memex, Oban, queues: false, plugins: false diff --git a/contributing.md b/contributing.md index 7ffed2f..699493b 100644 --- a/contributing.md +++ b/contributing.md @@ -77,21 +77,21 @@ Check them out! For development, I recommend setting environment variables with [direnv](https://direnv.net). -By default, Lokal will always bind to all external IPv4 and IPv6 addresses in +By default, Memex will always bind to all external IPv4 and IPv6 addresses in `dev` and `prod` mode, respectively. If you would like to use different values, they will need to be overridden in `config/dev.exs` and `config/runtime.exs` for `dev` and `prod` modes, respectively. ## `MIX_ENV=dev` -In `dev` mode, Lokal will listen for these environment variables at runtime. +In `dev` mode, Memex will listen for these environment variables at runtime. - `HOST`: External url to generate links with. Set this especially if you're behind a reverse proxy. Defaults to `localhost`. External URLs will always be generated with `https://` and port `443`. - `PORT`: Internal port to bind to. Defaults to `4000`. - `DATABASE_URL`: Controls the database url to connect to. Defaults to - `ecto://postgres:postgres@localhost/lokal_dev`. + `ecto://postgres:postgres@localhost/memex_dev`. - `ECTO_IPV6`: Controls if Ecto should use IPv6 to connect to PostgreSQL. Defaults to `false`. - `POOL_SIZE`: Controls the pool size to use with PostgreSQL. Defaults to `10`. @@ -100,20 +100,20 @@ In `dev` mode, Lokal will listen for these environment variables at runtime. ## `MIX_ENV=test` -In `test` mode (or in the Docker container), Lokal will listen for the same environment variables as dev mode, but also include the following at runtime: +In `test` mode (or in the Docker container), Memex will listen for the same environment variables as dev mode, but also include the following at runtime: - `TEST_DATABASE_URL`: REPLACES `DATABASE_URL`. Controls the database url to - connect to. Defaults to `ecto://postgres:postgres@localhost/lokal_test`. + connect to. Defaults to `ecto://postgres:postgres@localhost/memex_test`. - `MIX_TEST_PARTITION`: Only used if `TEST_DATABASE_URL` is not specified. Appended to the default database url if you would like to partition your test databases. Defaults to not set. ## `MIX_ENV=prod` -In `prod` mode (or in the Docker container), Lokal will listen for the same environment variables as dev mode, but also include the following at runtime: +In `prod` mode (or in the Docker container), Memex will listen for the same environment variables as dev mode, but also include the following at runtime: - `SECRET_KEY_BASE`: Secret key base used to sign cookies. Must be generated - with `docker run -it shibaobun/lokal mix phx.gen.secret` and set for server to start. + with `docker run -it shibaobun/memex mix phx.gen.secret` and set for server to start. - `SMTP_HOST`: The url for your SMTP email provider. Must be set - `SMTP_PORT`: The port for your SMTP relay. Defaults to `587`. - `SMTP_USERNAME`: The username for your SMTP relay. Must be set! @@ -121,4 +121,4 @@ In `prod` mode (or in the Docker container), Lokal will listen for the same envi - `SMTP_SSL`: Set to `true` to enable SSL for emails. Defaults to `false`. - `EMAIL_FROM`: Sets the sender email in sent emails. Defaults to `no-reply@HOST` where `HOST` was previously defined. -- `EMAIL_NAME`: Sets the sender name in sent emails. Defaults to "Lokal". +- `EMAIL_NAME`: Sets the sender name in sent emails. Defaults to "Memex". diff --git a/docker-compose.yml b/docker-compose.yml index 00dc048..2f2c309 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,16 +1,16 @@ version: '3' services: - lokal: + memex: build: context: . - container_name: lokal + container_name: memex restart: always environment: # HOST must be set! # - HOST=your.domain.com - - DATABASE_URL=ecto://postgres:postgres@lokal-db/lokal - # Use `docker run -it shibaobun/lokal /app/priv/random.sh` to generate a secret key base + - DATABASE_URL=ecto://postgres:postgres@memex-db/memex + # Use `docker run -it shibaobun/memex /app/priv/random.sh` to generate a secret key base # - SECRET_KEY_BASE=change-me-this-is-really-important-seriously-change-it # uncomment to enable public sign ups, not recommended # - REGISTRATION=public @@ -24,21 +24,21 @@ services: # optional, default is false # - SMTP_SSL=false # optional, default is format below - # - EMAIL_FROM=no-reply@lokal.example.tld - # optional, default is "Lokal" - # - EMAIL_NAME=Lokal + # - EMAIL_FROM=no-reply@memex.example.tld + # optional, default is "Memex" + # - EMAIL_NAME=Memex expose: - "4000" depends_on: - - lokal-db + - memex-db - lokal-db: + memex-db: image: postgres:13 - container_name: lokal-db + container_name: memex-db environment: - POSTGRES_USER="postgres" - POSTGRES_PASSWORD="postgres" - - POSTGRES_DB="lokal" + - POSTGRES_DB="memex" restart: always volumes: - ./data:/var/lib/postgresql/data diff --git a/lib/lokal_web/views/email_view.ex b/lib/lokal_web/views/email_view.ex deleted file mode 100644 index d5ba376..0000000 --- a/lib/lokal_web/views/email_view.ex +++ /dev/null @@ -1,8 +0,0 @@ -defmodule LokalWeb.EmailView do - @moduledoc """ - A view for email-related helper functions - """ - alias LokalWeb.{Endpoint, HomeLive} - - use LokalWeb, :view -end diff --git a/lib/lokal_web/views/home_view.ex b/lib/lokal_web/views/home_view.ex deleted file mode 100644 index e35e20d..0000000 --- a/lib/lokal_web/views/home_view.ex +++ /dev/null @@ -1,3 +0,0 @@ -defmodule LokalWeb.PageView do - use LokalWeb, :view -end diff --git a/lib/lokal_web/views/user_confirmation_view.ex b/lib/lokal_web/views/user_confirmation_view.ex deleted file mode 100644 index c9ed551..0000000 --- a/lib/lokal_web/views/user_confirmation_view.ex +++ /dev/null @@ -1,4 +0,0 @@ -defmodule LokalWeb.UserConfirmationView do - use LokalWeb, :view - alias Lokal.Accounts -end diff --git a/lib/lokal_web/views/user_registration_view.ex b/lib/lokal_web/views/user_registration_view.ex deleted file mode 100644 index 73a9405..0000000 --- a/lib/lokal_web/views/user_registration_view.ex +++ /dev/null @@ -1,3 +0,0 @@ -defmodule LokalWeb.UserRegistrationView do - use LokalWeb, :view -end diff --git a/lib/lokal_web/views/user_reset_password_view.ex b/lib/lokal_web/views/user_reset_password_view.ex deleted file mode 100644 index 6232dc4..0000000 --- a/lib/lokal_web/views/user_reset_password_view.ex +++ /dev/null @@ -1,4 +0,0 @@ -defmodule LokalWeb.UserResetPasswordView do - use LokalWeb, :view - alias Lokal.Accounts -end diff --git a/lib/lokal_web/views/user_session_view.ex b/lib/lokal_web/views/user_session_view.ex deleted file mode 100644 index bb9bf6f..0000000 --- a/lib/lokal_web/views/user_session_view.ex +++ /dev/null @@ -1,4 +0,0 @@ -defmodule LokalWeb.UserSessionView do - use LokalWeb, :view - alias Lokal.Accounts -end diff --git a/lib/lokal_web/views/user_settings_view.ex b/lib/lokal_web/views/user_settings_view.ex deleted file mode 100644 index 3cbe04c..0000000 --- a/lib/lokal_web/views/user_settings_view.ex +++ /dev/null @@ -1,3 +0,0 @@ -defmodule LokalWeb.UserSettingsView do - use LokalWeb, :view -end diff --git a/lib/lokal.ex b/lib/memex.ex similarity index 71% rename from lib/lokal.ex rename to lib/memex.ex index f9e54e4..3ac7ac1 100644 --- a/lib/lokal.ex +++ b/lib/memex.ex @@ -1,6 +1,6 @@ -defmodule Lokal do +defmodule Memex do @moduledoc """ - Lokal keeps the contexts that define your domain + Memex keeps the contexts that define your domain and business logic. Contexts are also responsible for managing your data, regardless diff --git a/lib/lokal/accounts.ex b/lib/memex/accounts.ex similarity index 98% rename from lib/lokal/accounts.ex rename to lib/memex/accounts.ex index fdcbe12..a51eb80 100644 --- a/lib/lokal/accounts.ex +++ b/lib/memex/accounts.ex @@ -1,11 +1,11 @@ -defmodule Lokal.Accounts do +defmodule Memex.Accounts do @moduledoc """ The Accounts context. """ import Ecto.Query, warn: false - alias Lokal.{Mailer, Repo} - alias Lokal.Accounts.{User, UserToken} + alias Memex.{Mailer, Repo} + alias Memex.Accounts.{User, UserToken} alias Ecto.{Changeset, Multi} alias Oban.Job @@ -349,7 +349,7 @@ defmodule Lokal.Accounts do """ @spec allow_registration?() :: boolean() def allow_registration? do - Application.get_env(:lokal, LokalWeb.Endpoint)[:registration] == "public" or + Application.get_env(:memex, MemexWeb.Endpoint)[:registration] == "public" or list_users_by_role(:admin) |> Enum.empty?() end diff --git a/lib/lokal/accounts/email.ex b/lib/memex/accounts/email.ex similarity index 66% rename from lib/lokal/accounts/email.ex rename to lib/memex/accounts/email.ex index 7c38e0a..791693d 100644 --- a/lib/lokal/accounts/email.ex +++ b/lib/memex/accounts/email.ex @@ -1,16 +1,16 @@ -defmodule Lokal.Email do +defmodule Memex.Email do @moduledoc """ Emails that can be sent using Swoosh. You can find the base email templates at - `lib/Lokal_web/templates/layout/email.html.heex` for html emails and - `lib/Lokal_web/templates/layout/email.txt.heex` for text emails. + `lib/memex_web/templates/layout/email.html.heex` for html emails and + `lib/memex_web/templates/layout/email.txt.heex` for text emails. """ - use Phoenix.Swoosh, view: LokalWeb.EmailView, layout: {LokalWeb.LayoutView, :email} - import LokalWeb.Gettext - alias Lokal.Accounts.User - alias LokalWeb.EmailView + use Phoenix.Swoosh, view: MemexWeb.EmailView, layout: {MemexWeb.LayoutView, :email} + import MemexWeb.Gettext + alias Memex.Accounts.User + alias MemexWeb.EmailView @typedoc """ Represents an HTML and text body email that can be sent @@ -19,29 +19,29 @@ defmodule Lokal.Email do @spec base_email(User.t(), String.t()) :: t() defp base_email(%User{email: email}, subject) do - from = Application.get_env(:Lokal, Lokal.Mailer)[:email_from] || "noreply@localhost" - name = Application.get_env(:Lokal, Lokal.Mailer)[:email_name] + from = Application.get_env(:Memex, Memex.Mailer)[:email_from] || "noreply@localhost" + name = Application.get_env(:Memex, Memex.Mailer)[:email_name] new() |> to(email) |> from({name, from}) |> subject(subject) end @spec generate_email(key :: String.t(), User.t(), attrs :: map()) :: t() def generate_email("welcome", user, %{"url" => url}) do user - |> base_email(dgettext("emails", "Confirm your Lokal account")) + |> base_email(dgettext("emails", "Confirm your Memex account")) |> render_body("confirm_email.html", %{user: user, url: url}) |> text_body(EmailView.render("confirm_email.txt", %{user: user, url: url})) end def generate_email("reset_password", user, %{"url" => url}) do user - |> base_email(dgettext("emails", "Reset your Lokal password")) + |> base_email(dgettext("emails", "Reset your Memex password")) |> render_body("reset_password.html", %{user: user, url: url}) |> text_body(EmailView.render("reset_password.txt", %{user: user, url: url})) end def generate_email("update_email", user, %{"url" => url}) do user - |> base_email(dgettext("emails", "Update your Lokal email")) + |> base_email(dgettext("emails", "Update your Memex email")) |> render_body("update_email.html", %{user: user, url: url}) |> text_body(EmailView.render("update_email.txt", %{user: user, url: url})) end diff --git a/lib/lokal/accounts/email_worker.ex b/lib/memex/accounts/email_worker.ex similarity index 82% rename from lib/lokal/accounts/email_worker.ex rename to lib/memex/accounts/email_worker.ex index fc94144..0818cfd 100644 --- a/lib/lokal/accounts/email_worker.ex +++ b/lib/memex/accounts/email_worker.ex @@ -1,10 +1,10 @@ -defmodule Lokal.EmailWorker do +defmodule Memex.EmailWorker do @moduledoc """ Oban worker that dispatches emails """ use Oban.Worker, queue: :mailers, tags: ["email"] - alias Lokal.{Accounts, Email, Mailer} + alias Memex.{Accounts, Email, Mailer} @impl Oban.Worker def perform(%Oban.Job{args: %{"email" => email, "user_id" => user_id, "attrs" => attrs}}) do diff --git a/lib/lokal/accounts/user.ex b/lib/memex/accounts/user.ex similarity index 97% rename from lib/lokal/accounts/user.ex rename to lib/memex/accounts/user.ex index 074a456..7fa0ebd 100644 --- a/lib/lokal/accounts/user.ex +++ b/lib/memex/accounts/user.ex @@ -1,13 +1,13 @@ -defmodule Lokal.Accounts.User do +defmodule Memex.Accounts.User do @moduledoc """ - A Lokal user + A Memex user """ use Ecto.Schema import Ecto.Changeset - import LokalWeb.Gettext + import MemexWeb.Gettext alias Ecto.{Changeset, UUID} - alias Lokal.{Accounts.User, Invites.Invite} + alias Memex.{Accounts.User, Invites.Invite} @derive {Inspect, except: [:password]} @primary_key {:id, :binary_id, autogenerate: true} @@ -84,7 +84,7 @@ defmodule Lokal.Accounts.User do message: dgettext("errors", "must have the @ sign and no spaces") ) |> validate_length(:email, max: 160) - |> unsafe_validate_unique(:email, Lokal.Repo) + |> unsafe_validate_unique(:email, Memex.Repo) |> unique_constraint(:email) end diff --git a/lib/lokal/accounts/user_notifier.ex b/lib/memex/accounts/user_notifier.ex similarity index 97% rename from lib/lokal/accounts/user_notifier.ex rename to lib/memex/accounts/user_notifier.ex index 10a9c6d..7c798e0 100644 --- a/lib/lokal/accounts/user_notifier.ex +++ b/lib/memex/accounts/user_notifier.ex @@ -1,4 +1,4 @@ -defmodule Lokal.Accounts.UserNotifier do +defmodule Memex.Accounts.UserNotifier do @moduledoc """ Contains templates and messages for user messages """ diff --git a/lib/lokal/accounts/user_token.ex b/lib/memex/accounts/user_token.ex similarity index 91% rename from lib/lokal/accounts/user_token.ex rename to lib/memex/accounts/user_token.ex index e37c77f..eca396f 100644 --- a/lib/lokal/accounts/user_token.ex +++ b/lib/memex/accounts/user_token.ex @@ -1,4 +1,4 @@ -defmodule Lokal.Accounts.UserToken do +defmodule Memex.Accounts.UserToken do @moduledoc """ Schema for a user's session token """ @@ -22,7 +22,7 @@ defmodule Lokal.Accounts.UserToken do field :token, :binary field :context, :string field :sent_to, :string - belongs_to :user, Lokal.Accounts.User + belongs_to :user, Memex.Accounts.User timestamps(updated_at: false) end @@ -34,7 +34,7 @@ defmodule Lokal.Accounts.UserToken do """ def build_session_token(user) do token = :crypto.strong_rand_bytes(@rand_size) - {token, %Lokal.Accounts.UserToken{token: token, context: "session", user_id: user.id}} + {token, %Memex.Accounts.UserToken{token: token, context: "session", user_id: user.id}} end @doc """ @@ -69,7 +69,7 @@ defmodule Lokal.Accounts.UserToken do hashed_token = :crypto.hash(@hash_algorithm, token) {Base.url_encode64(token, padding: false), - %Lokal.Accounts.UserToken{ + %Memex.Accounts.UserToken{ token: hashed_token, context: context, sent_to: sent_to, @@ -129,17 +129,17 @@ defmodule Lokal.Accounts.UserToken do Returns the given token with the given context. """ def token_and_context_query(token, context) do - from Lokal.Accounts.UserToken, where: [token: ^token, context: ^context] + from Memex.Accounts.UserToken, where: [token: ^token, context: ^context] end @doc """ Gets all tokens for the given user for the given contexts. """ def user_and_contexts_query(user, :all) do - from t in Lokal.Accounts.UserToken, where: t.user_id == ^user.id + from t in Memex.Accounts.UserToken, where: t.user_id == ^user.id end def user_and_contexts_query(user, [_ | _] = contexts) do - from t in Lokal.Accounts.UserToken, where: t.user_id == ^user.id and t.context in ^contexts + from t in Memex.Accounts.UserToken, where: t.user_id == ^user.id and t.context in ^contexts end end diff --git a/lib/lokal/application.ex b/lib/memex/application.ex similarity index 62% rename from lib/lokal/application.ex rename to lib/memex/application.ex index e6266a5..2cd79c5 100644 --- a/lib/lokal/application.ex +++ b/lib/memex/application.ex @@ -1,4 +1,4 @@ -defmodule Lokal.Application do +defmodule Memex.Application do # See https://hexdocs.pm/elixir/Application.html # for more information on OTP Applications @moduledoc false @@ -9,28 +9,28 @@ defmodule Lokal.Application do def start(_type, _args) do children = [ # Start the Ecto repository - Lokal.Repo, + Memex.Repo, # Start the Telemetry supervisor - LokalWeb.Telemetry, + MemexWeb.Telemetry, # Start the PubSub system - {Phoenix.PubSub, name: Lokal.PubSub}, + {Phoenix.PubSub, name: Memex.PubSub}, # Start the Endpoint (http/https) - LokalWeb.Endpoint, + MemexWeb.Endpoint, # Add Oban {Oban, oban_config()} - # Start a worker by calling: Lokal.Worker.start_link(arg) - # {Lokal.Worker, arg} + # Start a worker by calling: Memex.Worker.start_link(arg) + # {Memex.Worker, arg} ] # Automatically migrate on start in prod children = - if Application.get_env(:lokal, Lokal.Application, automigrate: false)[:automigrate], - do: children ++ [Lokal.Repo.Migrator], + if Application.get_env(:memex, Memex.Application, automigrate: false)[:automigrate], + do: children ++ [Memex.Repo.Migrator], else: children # See https://hexdocs.pm/elixir/Supervisor.html # for other strategies and supported options - opts = [strategy: :one_for_one, name: Lokal.Supervisor] + opts = [strategy: :one_for_one, name: Memex.Supervisor] Supervisor.start_link(children, opts) end @@ -38,11 +38,11 @@ defmodule Lokal.Application do # whenever the application is updated. @impl true def config_change(changed, _new, removed) do - LokalWeb.Endpoint.config_change(changed, removed) + MemexWeb.Endpoint.config_change(changed, removed) :ok end defp oban_config do - Application.fetch_env!(:lokal, Oban) + Application.fetch_env!(:memex, Oban) end end diff --git a/lib/lokal/invites.ex b/lib/memex/invites.ex similarity index 98% rename from lib/lokal/invites.ex rename to lib/memex/invites.ex index 4e03b37..1c68599 100644 --- a/lib/lokal/invites.ex +++ b/lib/memex/invites.ex @@ -1,11 +1,11 @@ -defmodule Lokal.Invites do +defmodule Memex.Invites do @moduledoc """ The Invites context. """ import Ecto.Query, warn: false alias Ecto.Changeset - alias Lokal.{Accounts.User, Invites.Invite, Repo} + alias Memex.{Accounts.User, Invites.Invite, Repo} @invite_token_length 20 diff --git a/lib/lokal/invites/invite.ex b/lib/memex/invites/invite.ex similarity index 95% rename from lib/lokal/invites/invite.ex rename to lib/memex/invites/invite.ex index f130158..0713fc2 100644 --- a/lib/lokal/invites/invite.ex +++ b/lib/memex/invites/invite.ex @@ -1,4 +1,4 @@ -defmodule Lokal.Invites.Invite do +defmodule Memex.Invites.Invite do @moduledoc """ An invite, created by an admin to allow someone to join their instance. An invite can be enabled or disabled, and can have an optional number of uses if @@ -8,7 +8,7 @@ defmodule Lokal.Invites.Invite do use Ecto.Schema import Ecto.Changeset alias Ecto.{Changeset, UUID} - alias Lokal.{Accounts.User, Invites.Invite} + alias Memex.{Accounts.User, Invites.Invite} @primary_key {:id, :binary_id, autogenerate: true} @foreign_key_type :binary_id diff --git a/lib/lokal/mailer.ex b/lib/memex/mailer.ex similarity index 91% rename from lib/lokal/mailer.ex rename to lib/memex/mailer.ex index 792696f..e5a1d98 100644 --- a/lib/lokal/mailer.ex +++ b/lib/memex/mailer.ex @@ -1,4 +1,4 @@ -defmodule Lokal.Mailer do +defmodule Memex.Mailer do @moduledoc """ Mailer adapter for emails @@ -6,8 +6,8 @@ defmodule Lokal.Mailer do json with Jason, which restricts the use of structs. """ - use Swoosh.Mailer, otp_app: :lokal - alias Lokal.{Accounts.User, EmailWorker} + use Swoosh.Mailer, otp_app: :memex + alias Memex.{Accounts.User, EmailWorker} alias Oban.Job @doc """ diff --git a/lib/lokal/release.ex b/lib/memex/release.ex similarity index 92% rename from lib/lokal/release.ex rename to lib/memex/release.ex index eb88117..c1a365d 100644 --- a/lib/lokal/release.ex +++ b/lib/memex/release.ex @@ -1,9 +1,9 @@ -defmodule Lokal.Release do +defmodule Memex.Release do @moduledoc """ Contains mix tasks that can used in generated releases """ - @app :lokal + @app :memex def rollback(repo, version) do load_app() diff --git a/lib/lokal/repo.ex b/lib/memex/repo.ex similarity index 55% rename from lib/lokal/repo.ex rename to lib/memex/repo.ex index bd4a401..254c067 100644 --- a/lib/lokal/repo.ex +++ b/lib/memex/repo.ex @@ -1,5 +1,5 @@ -defmodule Lokal.Repo do +defmodule Memex.Repo do use Ecto.Repo, - otp_app: :lokal, + otp_app: :memex, adapter: Ecto.Adapters.Postgres end diff --git a/lib/lokal/repo/migrator.ex b/lib/memex/repo/migrator.ex similarity index 64% rename from lib/lokal/repo/migrator.ex rename to lib/memex/repo/migrator.ex index 86eb63d..f64014d 100644 --- a/lib/lokal/repo/migrator.ex +++ b/lib/memex/repo/migrator.ex @@ -1,4 +1,4 @@ -defmodule Lokal.Repo.Migrator do +defmodule Memex.Repo.Migrator do @moduledoc """ Genserver to automatically perform all migration on app start """ @@ -16,7 +16,7 @@ defmodule Lokal.Repo.Migrator do end def migrate! do - path = Application.app_dir(:lokal, "priv/repo/migrations") - Ecto.Migrator.run(Lokal.Repo, path, :up, all: true) + path = Application.app_dir(:memex, "priv/repo/migrations") + Ecto.Migrator.run(Memex.Repo, path, :up, all: true) end end diff --git a/lib/lokal_web.ex b/lib/memex_web.ex similarity index 79% rename from lib/lokal_web.ex rename to lib/memex_web.ex index 6a07712..8ffff33 100644 --- a/lib/lokal_web.ex +++ b/lib/memex_web.ex @@ -1,12 +1,12 @@ -defmodule LokalWeb do +defmodule MemexWeb do @moduledoc """ The entrypoint for defining your web interface, such as controllers, views, channels and so on. This can be used in your application as: - use LokalWeb, :controller - use LokalWeb, :view + use MemexWeb, :controller + use MemexWeb, :view The definitions below will be executed for every view, controller, etc, so keep them short and clean, focused @@ -19,19 +19,19 @@ defmodule LokalWeb do def controller do quote do - use Phoenix.Controller, namespace: LokalWeb + use Phoenix.Controller, namespace: MemexWeb import Plug.Conn - import LokalWeb.Gettext - alias LokalWeb.Router.Helpers, as: Routes + import MemexWeb.Gettext + alias MemexWeb.Router.Helpers, as: Routes end end def view do quote do use Phoenix.View, - root: "lib/lokal_web/templates", - namespace: LokalWeb + root: "lib/memex_web/templates", + namespace: MemexWeb # Import convenience functions from controllers import Phoenix.Controller, @@ -45,9 +45,9 @@ defmodule LokalWeb do def live_view do quote do use Phoenix.LiveView, - layout: {LokalWeb.LayoutView, "live.html"} + layout: {MemexWeb.LayoutView, "live.html"} - on_mount LokalWeb.InitAssigns + on_mount MemexWeb.InitAssigns unquote(view_helpers()) end end @@ -81,7 +81,7 @@ defmodule LokalWeb do def channel do quote do use Phoenix.Channel - import LokalWeb.Gettext + import MemexWeb.Gettext end end @@ -96,8 +96,8 @@ defmodule LokalWeb do # Import basic rendering functionality (render, render_layout, etc) import Phoenix.View - import LokalWeb.{ErrorHelpers, Gettext, LiveHelpers, ViewHelpers} - alias LokalWeb.Router.Helpers, as: Routes + import MemexWeb.{ErrorHelpers, Gettext, LiveHelpers, ViewHelpers} + alias MemexWeb.Router.Helpers, as: Routes end end diff --git a/lib/lokal_web/components/invite_card.ex b/lib/memex_web/components/invite_card.ex similarity index 93% rename from lib/lokal_web/components/invite_card.ex rename to lib/memex_web/components/invite_card.ex index 846e5d5..0ae9950 100644 --- a/lib/lokal_web/components/invite_card.ex +++ b/lib/memex_web/components/invite_card.ex @@ -1,10 +1,10 @@ -defmodule LokalWeb.Components.InviteCard do +defmodule MemexWeb.Components.InviteCard do @moduledoc """ Display card for an invite """ - use LokalWeb, :component - alias LokalWeb.Endpoint + use MemexWeb, :component + alias MemexWeb.Endpoint def invite_card(assigns) do ~H""" diff --git a/lib/lokal_web/components/table_component.ex b/lib/memex_web/components/table_component.ex similarity index 97% rename from lib/lokal_web/components/table_component.ex rename to lib/memex_web/components/table_component.ex index cdd0d6c..c52c72e 100644 --- a/lib/lokal_web/components/table_component.ex +++ b/lib/memex_web/components/table_component.ex @@ -1,4 +1,4 @@ -defmodule LokalWeb.Components.TableComponent do +defmodule MemexWeb.Components.TableComponent do @moduledoc """ Livecomponent that presents a resortable table @@ -19,7 +19,7 @@ defmodule LokalWeb.Components.TableComponent do content. """ - use LokalWeb, :live_component + use MemexWeb, :live_component alias Phoenix.LiveView.Socket @impl true diff --git a/lib/lokal_web/components/table_component.html.heex b/lib/memex_web/components/table_component.html.heex similarity index 100% rename from lib/lokal_web/components/table_component.html.heex rename to lib/memex_web/components/table_component.html.heex diff --git a/lib/lokal_web/components/topbar.ex b/lib/memex_web/components/topbar.ex similarity index 95% rename from lib/lokal_web/components/topbar.ex rename to lib/memex_web/components/topbar.ex index dd46fec..bba35fd 100644 --- a/lib/lokal_web/components/topbar.ex +++ b/lib/memex_web/components/topbar.ex @@ -1,12 +1,12 @@ -defmodule LokalWeb.Components.Topbar do +defmodule MemexWeb.Components.Topbar do @moduledoc """ Component that renders a topbar with user functions/links """ - use LokalWeb, :component + use MemexWeb, :component - alias Lokal.Accounts - alias LokalWeb.{Endpoint, HomeLive} + alias Memex.Accounts + alias MemexWeb.{Endpoint, HomeLive} def topbar(assigns) do assigns = @@ -16,7 +16,7 @@ defmodule LokalWeb.Components.Topbar do