rename to cannery

This commit is contained in:
2023-02-25 15:47:37 -05:00
parent bc034c0361
commit a778f5a61f
128 changed files with 999 additions and 998 deletions

View File

@ -1,6 +1,6 @@
defmodule Lokal do
defmodule Cannery do
@moduledoc """
Lokal keeps the contexts that define your domain
Cannery keeps the contexts that define your domain
and business logic.
Contexts are also responsible for managing your data, regardless

View File

@ -1,11 +1,11 @@
defmodule Lokal.Accounts do
defmodule Cannery.Accounts do
@moduledoc """
The Accounts context.
"""
import Ecto.Query, warn: false
alias Lokal.{Mailer, Repo}
alias Lokal.Accounts.{Invite, Invites, User, UserToken}
alias Cannery.{Mailer, Repo}
alias Cannery.Accounts.{Invite, Invites, User, UserToken}
alias Ecto.{Changeset, Multi}
alias Oban.Job
@ -385,7 +385,7 @@ defmodule Lokal.Accounts do
"""
@spec allow_registration?() :: boolean()
def allow_registration? do
Application.get_env(:lokal, Lokal.Accounts)[:registration] == "public" or
Application.get_env(:cannery, Cannery.Accounts)[:registration] == "public" or
list_users_by_role(:admin) |> Enum.empty?()
end

View File

@ -1,16 +1,16 @@
defmodule Lokal.Email do
defmodule Cannery.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/Cannery_web/templates/layout/email.html.heex` for html emails and
`lib/Cannery_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: CanneryWeb.EmailView, layout: {CanneryWeb.LayoutView, :email}
import CanneryWeb.Gettext
alias Cannery.Accounts.User
alias CanneryWeb.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(:Cannery, Cannery.Mailer)[:email_from] || "noreply@localhost"
name = Application.get_env(:Cannery, Cannery.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 Cannery 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 Cannery 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 Cannery email"))
|> render_body("update_email.html", %{user: user, url: url})
|> text_body(EmailView.render("update_email.txt", %{user: user, url: url}))
end

View File

@ -1,10 +1,10 @@
defmodule Lokal.EmailWorker do
defmodule Cannery.EmailWorker do
@moduledoc """
Oban worker that dispatches emails
"""
use Oban.Worker, queue: :mailers, tags: ["email"]
alias Lokal.{Accounts, Email, Mailer}
alias Cannery.{Accounts, Email, Mailer}
@impl Oban.Worker
def perform(%Oban.Job{args: %{"email" => email, "user_id" => user_id, "attrs" => attrs}}) do

View File

@ -1,4 +1,4 @@
defmodule Lokal.Accounts.Invite do
defmodule Cannery.Accounts.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
@ -7,8 +7,8 @@ defmodule Lokal.Accounts.Invite do
use Ecto.Schema
import Ecto.Changeset
alias Cannery.Accounts.User
alias Ecto.{Association, Changeset, UUID}
alias Lokal.Accounts.User
@primary_key {:id, :binary_id, autogenerate: true}
@foreign_key_type :binary_id

View File

@ -1,12 +1,12 @@
defmodule Lokal.Accounts.Invites do
defmodule Cannery.Accounts.Invites do
@moduledoc """
The Invites context.
"""
import Ecto.Query, warn: false
alias Ecto.Multi
alias Lokal.Accounts.{Invite, User}
alias Lokal.Repo
alias Cannery.Accounts.{Invite, User}
alias Cannery.Repo
@invite_token_length 20

View File

@ -1,13 +1,13 @@
defmodule Lokal.Accounts.User do
defmodule Cannery.Accounts.User do
@moduledoc """
A Lokal user
A Cannery user
"""
use Ecto.Schema
import Ecto.Changeset
import LokalWeb.Gettext
import CanneryWeb.Gettext
alias Ecto.{Association, Changeset, UUID}
alias Lokal.Accounts.{Invite, User}
alias Cannery.Accounts.{Invite, User}
@derive {Jason.Encoder,
only: [
@ -99,7 +99,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, Cannery.Repo)
|> unique_constraint(:email)
end

View File

@ -1,4 +1,4 @@
defmodule Lokal.Accounts.UserNotifier do
defmodule Cannery.Accounts.UserNotifier do
@moduledoc """
Contains templates and messages for user messages
"""

View File

@ -1,12 +1,12 @@
defmodule Lokal.Accounts.UserToken do
defmodule Cannery.Accounts.UserToken do
@moduledoc """
Schema for a user's session token
"""
use Ecto.Schema
import Ecto.Query
alias Cannery.Accounts.User
alias Ecto.{Association, UUID}
alias Lokal.Accounts.User
@hash_algorithm :sha256
@rand_size 32

View File

@ -1,27 +1,27 @@
defmodule Lokal.Application do
defmodule Cannery.Application do
# See https://hexdocs.pm/elixir/Application.html
# for more information on OTP Applications
@moduledoc false
use Application
alias Lokal.Logger
alias Cannery.Logger
@impl true
def start(_type, _args) do
children = [
# Start the Ecto repository
Lokal.Repo,
Cannery.Repo,
# Start the Telemetry supervisor
LokalWeb.Telemetry,
CanneryWeb.Telemetry,
# Start the PubSub system
{Phoenix.PubSub, name: Lokal.PubSub},
{Phoenix.PubSub, name: Cannery.PubSub},
# Start the Endpoint (http/https)
LokalWeb.Endpoint,
CanneryWeb.Endpoint,
# Add Oban
{Oban, oban_config()},
Lokal.Repo.Migrator
# Start a worker by calling: Lokal.Worker.start_link(arg)
# {Lokal.Worker, arg}
Cannery.Repo.Migrator
# Start a worker by calling: Cannery.Worker.start_link(arg)
# {Cannery.Worker, arg}
]
# Oban events logging https://hexdocs.pm/oban/Oban.html#module-reporting-errors
@ -39,7 +39,7 @@ defmodule Lokal.Application do
# 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: Cannery.Supervisor]
Supervisor.start_link(children, opts)
end
@ -47,11 +47,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)
CanneryWeb.Endpoint.config_change(changed, removed)
:ok
end
defp oban_config do
Application.fetch_env!(:lokal, Oban)
Application.fetch_env!(:cannery, Oban)
end
end

View File

@ -1,4 +1,4 @@
defmodule Lokal.Logger do
defmodule Cannery.Logger do
@moduledoc """
Custom logger for telemetry events

View File

@ -1,4 +1,4 @@
defmodule Lokal.Mailer do
defmodule Cannery.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: :cannery
alias Cannery.{Accounts.User, EmailWorker}
alias Oban.Job
@doc """

View File

@ -1,9 +1,9 @@
defmodule Lokal.Release do
defmodule Cannery.Release do
@moduledoc """
Contains mix tasks that can used in generated releases
"""
@app :lokal
@app :cannery
def rollback(repo, version) do
load_app()

View File

@ -1,5 +1,5 @@
defmodule Lokal.Repo do
defmodule Cannery.Repo do
use Ecto.Repo,
otp_app: :lokal,
otp_app: :cannery,
adapter: Ecto.Adapters.Postgres
end

View File

@ -1,4 +1,4 @@
defmodule Lokal.Repo.Migrator do
defmodule Cannery.Repo.Migrator do
@moduledoc """
Genserver to automatically perform all migration on app start
"""
@ -15,11 +15,11 @@ 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(:cannery, "priv/repo/migrations")
Ecto.Migrator.run(Cannery.Repo, path, :up, all: true)
end
defp automigrate_enabled? do
Application.get_env(:lokal, Lokal.Application, automigrate: false)[:automigrate]
Application.get_env(:cannery, Cannery.Application, automigrate: false)[:automigrate]
end
end

View File

@ -1,12 +1,12 @@
defmodule LokalWeb do
defmodule CanneryWeb 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 CanneryWeb, :controller
use CanneryWeb, :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: CanneryWeb
import Plug.Conn
import LokalWeb.Gettext
alias LokalWeb.Router.Helpers, as: Routes
import CanneryWeb.Gettext
alias CanneryWeb.Router.Helpers, as: Routes
end
end
def view do
quote do
use Phoenix.View,
root: "lib/lokal_web/templates",
namespace: LokalWeb
root: "lib/cannery_web/templates",
namespace: CanneryWeb
# 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: {CanneryWeb.LayoutView, "live.html"}
on_mount LokalWeb.InitAssigns
on_mount CanneryWeb.InitAssigns
unquote(view_helpers())
end
end
@ -82,7 +82,7 @@ defmodule LokalWeb do
quote do
use Phoenix.Channel
# credo:disable-for-next-line Credo.Check.Consistency.MultiAliasImportRequireUse
import LokalWeb.Gettext
import CanneryWeb.Gettext
end
end
@ -95,9 +95,9 @@ defmodule LokalWeb do
# Import LiveView and .heex helpers (live_render, link, <.form>, etc)
# Import basic rendering functionality (render, render_layout, etc)
import Phoenix.{Component, View}
import LokalWeb.{ErrorHelpers, Gettext, LiveHelpers, ViewHelpers}
import CanneryWeb.{ErrorHelpers, Gettext, LiveHelpers, ViewHelpers}
alias LokalWeb.Router.Helpers, as: Routes
alias CanneryWeb.Router.Helpers, as: Routes
end
end

View File

@ -1,11 +1,11 @@
defmodule LokalWeb.Components.InviteCard do
defmodule CanneryWeb.Components.InviteCard do
@moduledoc """
Display card for an invite
"""
use LokalWeb, :component
alias Lokal.Accounts.{Invite, Invites, User}
alias LokalWeb.Endpoint
use CanneryWeb, :component
alias Cannery.Accounts.{Invite, Invites, User}
alias CanneryWeb.Endpoint
attr :invite, Invite, required: true
attr :current_user, User, required: true

View File

@ -1,4 +1,4 @@
defmodule LokalWeb.Components.TableComponent do
defmodule CanneryWeb.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 CanneryWeb, :live_component
alias Phoenix.LiveView.Socket
@impl true

View File

@ -1,12 +1,12 @@
defmodule LokalWeb.Components.Topbar do
defmodule CanneryWeb.Components.Topbar do
@moduledoc """
Component that renders a topbar with user functions/links
"""
use LokalWeb, :component
use CanneryWeb, :component
alias Lokal.Accounts
alias LokalWeb.{Endpoint, HomeLive}
alias Cannery.Accounts
alias CanneryWeb.{Endpoint, HomeLive}
def topbar(assigns) do
assigns =
@ -20,7 +20,7 @@ defmodule LokalWeb.Components.Topbar do
navigate={Routes.live_path(Endpoint, HomeLive)}
class="mx-2 my-1 leading-5 text-xl text-white hover:underline"
>
<%= gettext("Lokal") %>
<%= gettext("Cannery") %>
</.link>
<%= if @title_content do %>

View File

@ -1,9 +1,9 @@
defmodule LokalWeb.Components.UserCard do
defmodule CanneryWeb.Components.UserCard do
@moduledoc """
Display card for a user
"""
use LokalWeb, :component
use CanneryWeb, :component
def user_card(assigns) do
~H"""

View File

@ -1,16 +1,16 @@
defmodule LokalWeb.EmailController do
defmodule CanneryWeb.EmailController do
@moduledoc """
A dev controller used to develop on emails
"""
use LokalWeb, :controller
alias Lokal.Accounts.User
use CanneryWeb, :controller
alias Cannery.Accounts.User
plug :put_layout, {LokalWeb.LayoutView, :email}
plug :put_layout, {CanneryWeb.LayoutView, :email}
@sample_assigns %{
email: %{subject: "Example subject"},
url: "https://lokal.bubbletea.dev/sample_url",
url: "https://cannery.bubbletea.dev/sample_url",
user: %User{email: "sample@email.com"}
}

View File

@ -1,9 +1,9 @@
defmodule LokalWeb.HomeController do
defmodule CanneryWeb.HomeController do
@moduledoc """
Controller for home page
"""
use LokalWeb, :controller
use CanneryWeb, :controller
def index(conn, _params) do
render(conn, "index.html")

View File

@ -1,20 +1,20 @@
defmodule LokalWeb.UserAuth do
defmodule CanneryWeb.UserAuth do
@moduledoc """
Functions for user session and authentication
"""
import Plug.Conn
import Phoenix.Controller
import LokalWeb.Gettext
alias Lokal.{Accounts, Accounts.User}
alias LokalWeb.HomeLive
alias LokalWeb.Router.Helpers, as: Routes
import CanneryWeb.Gettext
alias Cannery.{Accounts, Accounts.User}
alias CanneryWeb.HomeLive
alias CanneryWeb.Router.Helpers, as: Routes
# Make the remember me cookie valid for 60 days.
# If you want bump or reduce this value, also change
# the token expiry itself in UserToken.
@max_age 60 * 60 * 24 * 60
@remember_me_cookie "_lokal_web_user_remember_me"
@remember_me_cookie "_cannery_web_user_remember_me"
@remember_me_options [sign: true, max_age: @max_age, same_site: "Lax"]
@doc """
@ -99,7 +99,7 @@ defmodule LokalWeb.UserAuth do
user_token && Accounts.delete_session_token(user_token)
if live_socket_id = get_session(conn, :live_socket_id) do
LokalWeb.Endpoint.broadcast(live_socket_id, "disconnect", %{})
CanneryWeb.Endpoint.broadcast(live_socket_id, "disconnect", %{})
end
conn

View File

@ -1,8 +1,8 @@
defmodule LokalWeb.UserConfirmationController do
use LokalWeb, :controller
defmodule CanneryWeb.UserConfirmationController do
use CanneryWeb, :controller
import LokalWeb.Gettext
alias Lokal.Accounts
import CanneryWeb.Gettext
alias Cannery.Accounts
def new(conn, _params) do
render(conn, "new.html", page_title: gettext("Confirm your account"))

View File

@ -1,8 +1,8 @@
defmodule LokalWeb.UserRegistrationController do
use LokalWeb, :controller
import LokalWeb.Gettext
alias Lokal.{Accounts, Accounts.Invites}
alias LokalWeb.{Endpoint, HomeLive}
defmodule CanneryWeb.UserRegistrationController do
use CanneryWeb, :controller
import CanneryWeb.Gettext
alias Cannery.{Accounts, Accounts.Invites}
alias CanneryWeb.{Endpoint, HomeLive}
def new(conn, %{"invite" => invite_token}) do
if Invites.valid_invite_token?(invite_token) do

View File

@ -1,7 +1,7 @@
defmodule LokalWeb.UserResetPasswordController do
use LokalWeb, :controller
defmodule CanneryWeb.UserResetPasswordController do
use CanneryWeb, :controller
alias Lokal.Accounts
alias Cannery.Accounts
plug :get_user_by_reset_password_token when action in [:edit, :update]

View File

@ -1,8 +1,8 @@
defmodule LokalWeb.UserSessionController do
use LokalWeb, :controller
defmodule CanneryWeb.UserSessionController do
use CanneryWeb, :controller
alias Lokal.Accounts
alias LokalWeb.UserAuth
alias Cannery.Accounts
alias CanneryWeb.UserAuth
def new(conn, _params) do
render(conn, "new.html", error_message: nil, page_title: gettext("Log in"))

View File

@ -1,8 +1,8 @@
defmodule LokalWeb.UserSettingsController do
use LokalWeb, :controller
import LokalWeb.Gettext
alias Lokal.Accounts
alias LokalWeb.{HomeLive, UserAuth}
defmodule CanneryWeb.UserSettingsController do
use CanneryWeb, :controller
import CanneryWeb.Gettext
alias Cannery.Accounts
alias CanneryWeb.{HomeLive, UserAuth}
plug :assign_email_and_password_changesets

View File

@ -1,12 +1,12 @@
defmodule LokalWeb.Endpoint do
use Phoenix.Endpoint, otp_app: :lokal
defmodule CanneryWeb.Endpoint do
use Phoenix.Endpoint, otp_app: :cannery
# The session will be stored in the cookie and signed,
# this means its contents can be read but not tampered with.
# Set :encryption_salt if you would also like to encrypt it.
@session_options [
store: :cookie,
key: "_lokal_key",
key: "_cannery_key",
signing_salt: "fxAnJltS"
]
@ -18,7 +18,7 @@ defmodule LokalWeb.Endpoint do
# when deploying your static files in production.
plug Plug.Static,
at: "/",
from: :lokal,
from: :cannery,
gzip: false,
only: ~w(css fonts images js favicon.ico robots.txt)
@ -28,7 +28,7 @@ defmodule LokalWeb.Endpoint do
socket "/phoenix/live_reload/socket", Phoenix.LiveReloader.Socket
plug Phoenix.LiveReloader
plug Phoenix.CodeReloader
plug Phoenix.Ecto.CheckRepoStatus, otp_app: :lokal
plug Phoenix.Ecto.CheckRepoStatus, otp_app: :cannery
end
plug Phoenix.LiveDashboard.RequestLogger,
@ -46,5 +46,5 @@ defmodule LokalWeb.Endpoint do
plug Plug.MethodOverride
plug Plug.Head
plug Plug.Session, @session_options
plug LokalWeb.Router
plug CanneryWeb.Router
end

View File

@ -1,11 +1,11 @@
defmodule LokalWeb.Gettext do
defmodule CanneryWeb.Gettext do
@moduledoc """
A module providing Internationalization with a gettext-based API.
By using [Gettext](https://hexdocs.pm/gettext),
your module gains a set of macros for translations, for example:
import LokalWeb.Gettext
import CanneryWeb.Gettext
# Simple translation
gettext("Here is the string to translate")
@ -20,5 +20,5 @@ defmodule LokalWeb.Gettext do
See the [Gettext Docs](https://hexdocs.pm/gettext) for detailed usage.
"""
use Gettext, otp_app: :lokal
use Gettext, otp_app: :cannery
end

View File

@ -1,11 +1,11 @@
defmodule LokalWeb.HomeLive do
defmodule CanneryWeb.HomeLive do
@moduledoc """
Liveview for the home page
"""
use LokalWeb, :live_view
alias Lokal.Accounts
alias LokalWeb.Endpoint
use CanneryWeb, :live_view
alias Cannery.Accounts
alias CanneryWeb.Endpoint
@version Mix.Project.config()[:version]

View File

@ -1,6 +1,6 @@
<div class="mx-auto px-8 sm:px-16 flex flex-col justify-center items-center text-center space-y-4 max-w-3xl">
<h1 class="title text-primary-600 text-2xl">
<%= gettext("Welcome to Lokal") %>
<%= gettext("Welcome to Cannery") %>
</h1>
<h2 class="title text-primary-600 text-lg">
@ -16,7 +16,7 @@
<%= gettext("Easy to Use:") %>
</b>
<p>
<%= gettext("Lokal lets you easily shop from your local community") %>
<%= gettext("Cannery lets you easily shop from your local community") %>
</p>
</li>
<li class="flex flex-col justify-center items-center space-y-2">
@ -53,7 +53,7 @@
<p>
<%= if @admins |> Enum.empty?() do %>
<.link href={Routes.user_registration_path(Endpoint, :new)} class="hover:underline">
<%= dgettext("prompts", "Register to setup Lokal") %>
<%= dgettext("prompts", "Register to setup Cannery") %>
</.link>
<% else %>
<div class="flex flex-wrap justify-center space-x-2">
@ -68,7 +68,7 @@
<li class="flex flex-row justify-center space-x-2">
<b><%= gettext("Registration:") %></b>
<p>
<%= case Application.get_env(:lokal, Lokal.Accounts)[:registration] do
<%= case Application.get_env(:cannery, Cannery.Accounts)[:registration] do
"public" -> gettext("Public Signups")
_ -> gettext("Invite Only")
end %>
@ -78,7 +78,7 @@
<li class="flex flex-row justify-center items-center space-x-2">
<b><%= gettext("Version:") %></b>
<.link
href="https://gitea.bubbletea.dev/shibao/lokal/src/branch/stable/CHANGELOG.md"
href="https://gitea.bubbletea.dev/shibao/cannery/src/branch/stable/CHANGELOG.md"
class="flex flex-row justify-center items-center space-x-2 hover:underline"
target="_blank"
rel="noopener noreferrer"
@ -101,7 +101,7 @@
<li class="flex flex-col justify-center space-x-2">
<.link
class="flex flex-row justify-center items-center space-x-2 hover:underline"
href="https://gitea.bubbletea.dev/shibao/lokal"
href="https://gitea.bubbletea.dev/shibao/cannery"
target="_blank"
rel="noopener noreferrer"
>
@ -112,7 +112,7 @@
<li class="flex flex-col justify-center space-x-2">
<.link
class="flex flex-row justify-center items-center space-x-2 hover:underline"
href="https://weblate.bubbletea.dev/engage/lokal"
href="https://weblate.bubbletea.dev/engage/cannery"
target="_blank"
rel="noopener noreferrer"
>
@ -123,7 +123,7 @@
<li class="flex flex-col justify-center space-x-2">
<.link
class="flex flex-row justify-center items-center space-x-2 hover:underline"
href="https://gitea.bubbletea.dev/shibao/lokal/issues/new"
href="https://gitea.bubbletea.dev/shibao/cannery/issues/new"
target="_blank"
rel="noopener noreferrer"
>

View File

@ -1,9 +1,9 @@
defmodule LokalWeb.InitAssigns do
defmodule CanneryWeb.InitAssigns do
@moduledoc """
Ensures common `assigns` are applied to all LiveViews attaching this hook.
"""
import Phoenix.Component
alias Lokal.Accounts
alias Cannery.Accounts
def on_mount(:default, _params, %{"locale" => locale, "user_token" => user_token}, socket) do
Gettext.put_locale(locale)

View File

@ -1,11 +1,11 @@
defmodule LokalWeb.InviteLive.FormComponent do
defmodule CanneryWeb.InviteLive.FormComponent do
@moduledoc """
Livecomponent that can update or create an Lokal.Accounts.Invite
Livecomponent that can update or create an Cannery.Accounts.Invite
"""
use LokalWeb, :live_component
use CanneryWeb, :live_component
alias Ecto.Changeset
alias Lokal.Accounts.{Invite, Invites, User}
alias Cannery.Accounts.{Invite, Invites, User}
alias Phoenix.LiveView.Socket
@impl true

View File

@ -1,13 +1,13 @@
defmodule LokalWeb.InviteLive.Index do
defmodule CanneryWeb.InviteLive.Index do
@moduledoc """
Liveview to show a Lokal.Accounts.Invite index
Liveview to show a Cannery.Accounts.Invite index
"""
use LokalWeb, :live_view
import LokalWeb.Components.{InviteCard, UserCard}
alias Lokal.Accounts
alias Lokal.Accounts.{Invite, Invites}
alias LokalWeb.{Endpoint, HomeLive}
use CanneryWeb, :live_view
import CanneryWeb.Components.{InviteCard, UserCard}
alias Cannery.Accounts
alias Cannery.Accounts.{Invite, Invites}
alias CanneryWeb.{Endpoint, HomeLive}
alias Phoenix.LiveView.JS
@impl true

View File

@ -24,7 +24,7 @@
<button
type="submit"
class="mx-2 my-1 btn btn-primary"
phx-click={JS.dispatch("lokal:clipcopy", to: "#code-#{invite.id}")}
phx-click={JS.dispatch("cannery:clipcopy", to: "#code-#{invite.id}")}
>
<%= dgettext("actions", "Copy to clipboard") %>
</button>
@ -138,7 +138,7 @@
<.modal :if={@live_action in [:new, :edit]} return_to={Routes.invite_index_path(Endpoint, :index)}>
<.live_component
module={LokalWeb.InviteLive.FormComponent}
module={CanneryWeb.InviteLive.FormComponent}
id={@invite.id || :new}
title={@page_title}
action={@live_action}

View File

@ -1,4 +1,4 @@
defmodule LokalWeb.LiveHelpers do
defmodule CanneryWeb.LiveHelpers do
@moduledoc """
Contains resuable methods for all liveviews
"""

View File

@ -1,13 +1,13 @@
defmodule LokalWeb.Router do
use LokalWeb, :router
defmodule CanneryWeb.Router do
use CanneryWeb, :router
import Phoenix.LiveDashboard.Router
import LokalWeb.UserAuth
import CanneryWeb.UserAuth
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_live_flash
plug :put_root_layout, {LokalWeb.LayoutView, :root}
plug :put_root_layout, {CanneryWeb.LayoutView, :root}
plug :protect_from_forgery
plug :put_secure_browser_headers
plug :fetch_current_user
@ -34,7 +34,7 @@ defmodule LokalWeb.Router do
plug :accepts, ["json"]
end
scope "/", LokalWeb do
scope "/", CanneryWeb do
pipe_through :browser
live "/", HomeLive
@ -42,7 +42,7 @@ defmodule LokalWeb.Router do
## Authentication routes
scope "/", LokalWeb do
scope "/", CanneryWeb do
pipe_through [:browser, :redirect_if_user_is_authenticated]
get "/users/register", UserRegistrationController, :new
@ -55,7 +55,7 @@ defmodule LokalWeb.Router do
put "/users/reset_password/:token", UserResetPasswordController, :update
end
scope "/", LokalWeb do
scope "/", CanneryWeb do
pipe_through [:browser, :require_authenticated_user]
get "/users/settings", UserSettingsController, :edit
@ -64,17 +64,17 @@ defmodule LokalWeb.Router do
get "/users/settings/confirm_email/:token", UserSettingsController, :confirm_email
end
scope "/", LokalWeb do
scope "/", CanneryWeb do
pipe_through [:browser, :require_authenticated_user, :require_admin]
live_dashboard "/dashboard", metrics: LokalWeb.Telemetry, ecto_repos: [Lokal.Repo]
live_dashboard "/dashboard", metrics: CanneryWeb.Telemetry, ecto_repos: [Cannery.Repo]
live "/invites", InviteLive.Index, :index
live "/invites/new", InviteLive.Index, :new
live "/invites/:id/edit", InviteLive.Index, :edit
end
scope "/", LokalWeb do
scope "/", CanneryWeb do
pipe_through [:browser]
delete "/users/log_out", UserSessionController, :delete
@ -95,7 +95,7 @@ defmodule LokalWeb.Router do
end
scope "/dev" do
get "/preview/:id", LokalWeb.EmailController, :preview
get "/preview/:id", CanneryWeb.EmailController, :preview
end
end
end

View File

@ -1,4 +1,4 @@
defmodule LokalWeb.Telemetry do
defmodule CanneryWeb.Telemetry do
@moduledoc """
Collects telemetry
"""
@ -35,23 +35,23 @@ defmodule LokalWeb.Telemetry do
),
# Database Metrics
summary("lokal.repo.query.total_time",
summary("cannery.repo.query.total_time",
unit: {:native, :millisecond},
description: "The sum of the other measurements"
),
summary("lokal.repo.query.decode_time",
summary("cannery.repo.query.decode_time",
unit: {:native, :millisecond},
description: "The time spent decoding the data received from the database"
),
summary("lokal.repo.query.query_time",
summary("cannery.repo.query.query_time",
unit: {:native, :millisecond},
description: "The time spent executing the query"
),
summary("lokal.repo.query.queue_time",
summary("cannery.repo.query.queue_time",
unit: {:native, :millisecond},
description: "The time spent waiting for a database connection"
),
summary("lokal.repo.query.idle_time",
summary("cannery.repo.query.idle_time",
unit: {:native, :millisecond},
description:
"The time the connection spent waiting before being checked out for the query"
@ -93,7 +93,7 @@ defmodule LokalWeb.Telemetry do
[
# A module, function and arguments to be invoked periodically.
# This function must call :telemetry.execute/3 and a metric must be added above.
# {LokalWeb, :count_users, []}
# {CanneryWeb, :count_users, []}
]
end
end

View File

@ -6,7 +6,7 @@
<br />
<span style="margin-bottom: 1em; font-size: 1.25em;">
<%= dgettext("emails", "Welcome to Lokal") %>
<%= dgettext("emails", "Welcome to Cannery") %>
</span>
<br />
@ -19,5 +19,5 @@
<br />
<%= dgettext("emails", "If you didn't create an account at Lokal, please ignore this.") %>
<%= dgettext("emails", "If you didn't create an account at Cannery, please ignore this.") %>
</div>

View File

@ -1,7 +1,7 @@
<%= dgettext("emails", "Hi %{email},", email: @user.email) %>
<%= dgettext("emails", "Welcome to Lokal") %>
<%= dgettext("emails", "Welcome to Cannery") %>
<%= dgettext("emails", "You can confirm your account by visiting the URL below:") %>

View File

@ -13,5 +13,5 @@
<br />
<%= dgettext("emails", "If you didn't request this change from Lokal, please ignore this.") %>
<%= dgettext("emails", "If you didn't request this change from Cannery, please ignore this.") %>
</div>

View File

@ -15,6 +15,6 @@
<%= dgettext(
"emails",
"If you didn't request this change from Lokal, please ignore this."
"If you didn't request this change from Cannery, please ignore this."
) %>
</div>

View File

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>
<%= dgettext("errors", "Error") %> | <%= gettext("Lokal") %>
<%= dgettext("errors", "Error") %> | <%= gettext("Cannery") %>
</title>
<link rel="stylesheet" href="/css/app.css" />
<script defer type="text/javascript" src="/js/app.js">
@ -13,7 +13,8 @@
</head>
<body class="pb-8 m-0 p-0 w-full h-full">
<header>
<.topbar current_user={assigns[:current_user]}></.topbar>
<CanneryWeb.Components.Topbar.topbar current_user={assigns[:current_user]}>
</CanneryWeb.Components.Topbar.topbar>
</header>
<div class="pb-8 w-full flex flex-col justify-center items-center text-center">

View File

@ -1,6 +1,7 @@
<main role="main" class="min-h-full min-w-full">
<header>
<.topbar current_user={assigns[:current_user]}></.topbar>
<CanneryWeb.Components.Topbar.topbar current_user={assigns[:current_user]}>
</CanneryWeb.Components.Topbar.topbar>
<div class="mx-8 my-2 flex flex-col space-y-4 text-center">
<p :if={get_flash(@conn, :info)} class="alert alert-info" role="alert">

View File

@ -12,7 +12,7 @@
<a style="color: rgb(31, 31, 31);" href={Routes.live_url(Endpoint, HomeLive)}>
<%= dgettext(
"emails",
"This email was sent from Lokal, the self-hosted firearm tracker website."
"This email was sent from Cannery, the self-hosted firearm tracker website."
) %>
</a>
</body>

View File

@ -7,5 +7,5 @@
=====================
<%= dgettext("emails",
"This email was sent from Lokal at %{url}, the self-hosted firearm tracker website.",
"This email was sent from Cannery at %{url}, the self-hosted firearm tracker website.",
url: Routes.live_url(Endpoint, HomeLive)) %>

View File

@ -1,6 +1,7 @@
<main class="pb-8 min-w-full">
<header>
<.topbar current_user={assigns[:current_user]}></.topbar>
<CanneryWeb.Components.Topbar.topbar current_user={assigns[:current_user]}>
</CanneryWeb.Components.Topbar.topbar>
<div class="mx-8 my-2 flex flex-col space-y-4 text-center">
<p

View File

@ -5,8 +5,8 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<%= csrf_meta_tag() %>
<.live_title suffix={" | #{gettext("Lokal")}"}>
<%= assigns[:page_title] || gettext("Lokal") %>
<.live_title suffix={" | #{gettext("Cannery")}"}>
<%= assigns[:page_title] || gettext("Cannery") %>
</.live_title>
<link phx-track-static rel="stylesheet" href={Routes.static_path(@conn, "/css/app.css")} />
<script

View File

@ -0,0 +1,7 @@
defmodule CanneryWeb.EmailView do
@moduledoc """
A view for email-related helper functions
"""
use CanneryWeb, :view
alias CanneryWeb.{Endpoint, HomeLive}
end

View File

@ -1,4 +1,4 @@
defmodule LokalWeb.ErrorHelpers do
defmodule CanneryWeb.ErrorHelpers do
@moduledoc """
Conveniences for translating and building error messages.
"""
@ -50,9 +50,9 @@ defmodule LokalWeb.ErrorHelpers do
# should be written to the errors.po file. The :count option is
# set by Ecto and indicates we should also apply plural rules.
if count = opts[:count] do
Gettext.dngettext(LokalWeb.Gettext, "errors", msg, msg, count, opts)
Gettext.dngettext(CanneryWeb.Gettext, "errors", msg, msg, count, opts)
else
Gettext.dgettext(LokalWeb.Gettext, "errors", msg, opts)
Gettext.dgettext(CanneryWeb.Gettext, "errors", msg, opts)
end
end

View File

@ -1,7 +1,6 @@
defmodule LokalWeb.ErrorView do
use LokalWeb, :view
import LokalWeb.Components.Topbar
alias LokalWeb.{Endpoint, HomeLive}
defmodule CanneryWeb.ErrorView do
use CanneryWeb, :view
alias CanneryWeb.{Endpoint, HomeLive}
def template_not_found(error_path, _assigns) do
error_string =

View File

@ -0,0 +1,3 @@
defmodule CanneryWeb.PageView do
use CanneryWeb, :view
end

View File

@ -1,17 +1,16 @@
defmodule LokalWeb.LayoutView do
use LokalWeb, :view
import LokalWeb.Components.Topbar
alias LokalWeb.{Endpoint, HomeLive}
defmodule CanneryWeb.LayoutView do
use CanneryWeb, :view
alias CanneryWeb.{Endpoint, HomeLive}
# Phoenix LiveDashboard is available only in development by default,
# so we instruct Elixir to not warn if the dashboard route is missing.
@compile {:no_warn_undefined, {Routes, :live_dashboard_path, 2}}
def get_title(%{assigns: %{title: title}}) when title not in [nil, ""] do
gettext("Lokal | %{title}", title: title)
gettext("Cannery | %{title}", title: title)
end
def get_title(_conn) do
gettext("Lokal")
gettext("Cannery")
end
end

View File

@ -0,0 +1,4 @@
defmodule CanneryWeb.UserConfirmationView do
use CanneryWeb, :view
alias Cannery.Accounts
end

View File

@ -0,0 +1,3 @@
defmodule CanneryWeb.UserRegistrationView do
use CanneryWeb, :view
end

View File

@ -0,0 +1,4 @@
defmodule CanneryWeb.UserResetPasswordView do
use CanneryWeb, :view
alias Cannery.Accounts
end

View File

@ -0,0 +1,4 @@
defmodule CanneryWeb.UserSessionView do
use CanneryWeb, :view
alias Cannery.Accounts
end

View File

@ -0,0 +1,3 @@
defmodule CanneryWeb.UserSettingsView do
use CanneryWeb, :view
end

View File

@ -1,7 +1,7 @@
defmodule LokalWeb.ViewHelpers do
defmodule CanneryWeb.ViewHelpers do
@moduledoc """
Contains common helpers that can be used in liveviews and regular views. These
are automatically imported into any Phoenix View using `use LokalWeb,
are automatically imported into any Phoenix View using `use CanneryWeb,
:view`
"""

View File

@ -1,7 +0,0 @@
defmodule LokalWeb.EmailView do
@moduledoc """
A view for email-related helper functions
"""
use LokalWeb, :view
alias LokalWeb.{Endpoint, HomeLive}
end

View File

@ -1,3 +0,0 @@
defmodule LokalWeb.PageView do
use LokalWeb, :view
end

View File

@ -1,4 +0,0 @@
defmodule LokalWeb.UserConfirmationView do
use LokalWeb, :view
alias Lokal.Accounts
end

View File

@ -1,3 +0,0 @@
defmodule LokalWeb.UserRegistrationView do
use LokalWeb, :view
end

View File

@ -1,4 +0,0 @@
defmodule LokalWeb.UserResetPasswordView do
use LokalWeb, :view
alias Lokal.Accounts
end

View File

@ -1,4 +0,0 @@
defmodule LokalWeb.UserSessionView do
use LokalWeb, :view
alias Lokal.Accounts
end

View File

@ -1,3 +0,0 @@
defmodule LokalWeb.UserSettingsView do
use LokalWeb, :view
end