From 232df26b8518f13ff96a91d64724d9580f291669 Mon Sep 17 00:00:00 2001 From: Pim Kunis Date: Wed, 1 Sep 2021 14:43:55 +0200 Subject: [PATCH] Rename repository --- .gitignore | 2 +- config/config.exs | 12 ++-- config/dev.exs | 14 ++--- config/prod.exs | 6 +- config/prod.secret.exs | 6 +- config/test.exs | 14 ++--- element.sh | 3 + lib/{matrix_server.ex => architex.ex} | 10 ++-- lib/architex/application.ex | 29 +++++++++ lib/{matrix_server => architex}/check.ex | 6 +- .../encodable_map.ex | 6 +- lib/{matrix_server => architex}/key_server.ex | 10 ++-- lib/architex/repo.ex | 5 ++ .../room_server.ex | 20 +++---- .../schema/account.ex | 16 ++--- .../schema/alias.ex | 4 +- .../schema/device.ex | 8 +-- .../schema/device_transaction.ex | 4 +- .../schema/event.ex | 26 ++++---- .../schema/event/generators.ex | 60 +++++++++---------- .../schema/joined_room.ex | 4 +- .../schema/room.ex | 8 +-- .../schema/server_key_info.ex | 10 ++-- .../schema/signing_key.ex | 4 +- .../state_resolution.ex | 6 +- .../state_resolution/authorization.ex | 12 ++-- .../types/alias_id.ex | 6 +- .../types/event_id.ex | 4 +- .../types/group_id.ex | 6 +- .../types/room_id.ex | 6 +- .../types/user_id.ex | 6 +- lib/{matrix_server_web.ex => architex_web.ex} | 18 +++--- .../client/authenticate_client.ex | 6 +- .../client/controllers/account_controller.ex | 10 ++-- .../client/controllers/aliases_controller.ex | 8 +-- .../client/controllers/info_controller.ex | 6 +- .../client/controllers/login_controller.ex | 12 ++-- .../client/controllers/register_controller.ex | 12 ++-- .../client/controllers/room_controller.ex | 12 ++-- .../controllers/room_directory_controller.ex | 8 +-- .../client/request/ban.ex | 4 +- .../client/request/create_room.ex | 2 +- .../client/request/kick.ex | 4 +- .../client/request/login.ex | 2 +- .../client/request/register.ex | 2 +- .../endpoint.ex | 12 ++-- .../error.ex | 2 +- .../federation/authenticate_server.ex | 18 +++--- .../controllers/event_controller.ex | 12 ++-- .../federation/controllers/key_controller.ex | 12 ++-- .../controllers/query_controller.ex | 14 ++--- .../federation/http_client.ex | 22 +++---- .../federation/request/get_signing_keys.ex | 6 +- .../federation/sign_request_middleware.ex | 6 +- .../federation/transaction.ex | 10 ++-- .../request.ex | 4 +- .../router.ex | 16 ++--- .../telemetry.ex | 14 ++--- lib/matrix_server/application.ex | 29 --------- lib/matrix_server/repo.ex | 5 -- mix.exs | 6 +- .../20210830160818_create_initial_tables.exs | 2 +- priv/repo/seeds.exs | 2 +- psql.sh | 2 +- test/controllers/info_controller_test.exs | 6 +- test/controllers/login_controller_test.exs | 10 ++-- test/controllers/register_controller_test.exs | 10 ++-- test/support/conn_case.ex | 14 ++--- test/support/data_case.ex | 12 ++-- test/support/factory.ex | 6 +- test/test_helper.exs | 2 +- 71 files changed, 348 insertions(+), 345 deletions(-) create mode 100755 element.sh rename lib/{matrix_server.ex => architex.ex} (96%) create mode 100644 lib/architex/application.ex rename lib/{matrix_server => architex}/check.ex (53%) rename lib/{matrix_server => architex}/encodable_map.ex (82%) rename lib/{matrix_server => architex}/key_server.ex (89%) create mode 100644 lib/architex/repo.ex rename lib/{matrix_server => architex}/room_server.ex (97%) rename lib/{matrix_server => architex}/schema/account.ex (89%) rename lib/{matrix_server => architex}/schema/alias.ex (90%) rename lib/{matrix_server => architex}/schema/device.ex (88%) rename lib/{matrix_server => architex}/schema/device_transaction.ex (80%) rename lib/{matrix_server => architex}/schema/event.ex (92%) rename lib/{matrix_server => architex}/schema/event/generators.ex (76%) rename lib/{matrix_server => architex}/schema/joined_room.ex (79%) rename lib/{matrix_server => architex}/schema/room.ex (88%) rename lib/{matrix_server => architex}/schema/server_key_info.ex (89%) rename lib/{matrix_server => architex}/schema/signing_key.ex (89%) rename lib/{matrix_server => architex}/state_resolution.ex (98%) rename lib/{matrix_server => architex}/state_resolution/authorization.ex (97%) rename lib/{matrix_server => architex}/types/alias_id.ex (88%) rename lib/{matrix_server => architex}/types/event_id.ex (89%) rename lib/{matrix_server => architex}/types/group_id.ex (89%) rename lib/{matrix_server => architex}/types/room_id.ex (87%) rename lib/{matrix_server => architex}/types/user_id.ex (87%) rename lib/{matrix_server_web.ex => architex_web.ex} (77%) rename lib/{matrix_server_web => architex_web}/client/authenticate_client.ex (85%) rename lib/{matrix_server_web => architex_web}/client/controllers/account_controller.ex (89%) rename lib/{matrix_server_web => architex_web}/client/controllers/aliases_controller.ex (77%) rename lib/{matrix_server_web => architex_web}/client/controllers/info_controller.ex (76%) rename lib/{matrix_server_web => architex_web}/client/controllers/login_controller.ex (85%) rename lib/{matrix_server_web => architex_web}/client/controllers/register_controller.ex (84%) rename lib/{matrix_server_web => architex_web}/client/controllers/room_controller.ex (95%) rename lib/{matrix_server_web => architex_web}/client/controllers/room_directory_controller.ex (90%) rename lib/{matrix_server_web => architex_web}/client/request/ban.ex (81%) rename lib/{matrix_server_web => architex_web}/client/request/create_room.ex (95%) rename lib/{matrix_server_web => architex_web}/client/request/kick.ex (81%) rename lib/{matrix_server_web => architex_web}/client/request/login.ex (94%) rename lib/{matrix_server_web => architex_web}/client/request/register.ex (95%) rename lib/{matrix_server_web => architex_web}/endpoint.ex (81%) rename lib/{matrix_server_web => architex_web}/error.ex (97%) rename lib/{matrix_server_web => architex_web}/federation/authenticate_server.ex (81%) rename lib/{matrix_server_web => architex_web}/federation/controllers/event_controller.ex (92%) rename lib/{matrix_server_web => architex_web}/federation/controllers/key_controller.ex (75%) rename lib/{matrix_server_web => architex_web}/federation/controllers/query_controller.ex (82%) rename lib/{matrix_server_web => architex_web}/federation/http_client.ex (76%) rename lib/{matrix_server_web => architex_web}/federation/request/get_signing_keys.ex (81%) rename lib/{matrix_server_web => architex_web}/federation/sign_request_middleware.ex (85%) rename lib/{matrix_server_web => architex_web}/federation/transaction.ex (73%) rename lib/{matrix_server_web => architex_web}/request.ex (85%) rename lib/{matrix_server_web => architex_web}/router.ex (85%) rename lib/{matrix_server_web => architex_web}/telemetry.ex (72%) delete mode 100644 lib/matrix_server/application.ex delete mode 100644 lib/matrix_server/repo.ex diff --git a/.gitignore b/.gitignore index 4e69868..2153e2b 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,7 @@ erl_crash.dump *.ez # Ignore package tarball (built via "mix hex.build"). -matrix_server-*.tar +architex-*.tar # Since we are building assets from assets/, # we ignore priv/static. You may want to comment diff --git a/config/config.exs b/config/config.exs index db98538..eac3b03 100644 --- a/config/config.exs +++ b/config/config.exs @@ -7,15 +7,15 @@ # General application configuration use Mix.Config -config :matrix_server, - ecto_repos: [MatrixServer.Repo] +config :architex, + ecto_repos: [Architex.Repo] # Configures the endpoint -config :matrix_server, MatrixServerWeb.Endpoint, +config :architex, ArchitexWeb.Endpoint, url: [host: "localhost"], secret_key_base: "npI0xfNYxf5FoTIdAoc7er0ZvdCJgQFZQ9LcpUFL6dsPXyQllMv45zaQQoO4ZLu1", - render_errors: [view: MatrixServerWeb.ErrorView, accepts: ~w(json), layout: false], - pubsub_server: MatrixServer.PubSub, + render_errors: [view: ArchitexWeb.ErrorView, accepts: ~w(json), layout: false], + pubsub_server: Architex.PubSub, live_view: [signing_salt: "6ymoi3Gx"] # Configures Elixir's Logger @@ -26,7 +26,7 @@ config :logger, :console, # Use Jason for JSON parsing in Phoenix config :phoenix, :json_library, Jason -config :matrix_server, MatrixServer.Repo, migration_timestamps: [type: :utc_datetime] +config :architex, Architex.Repo, migration_timestamps: [type: :utc_datetime] config :cors_plug, origin: ["*"], diff --git a/config/dev.exs b/config/dev.exs index 903eb6b..cd261cd 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -4,10 +4,10 @@ hostname = "localhost" port = System.get_env("PORT") || 4000 # Configure your database -config :matrix_server, MatrixServer.Repo, - username: "matrix_server", - password: "matrix_server", - database: "matrix_server_dev", +config :architex, Architex.Repo, + username: "architex", + password: "architex", + database: "architex_dev", hostname: hostname, show_sensitive_data_on_connection_error: true, pool_size: 10 @@ -18,7 +18,7 @@ config :matrix_server, MatrixServer.Repo, # The watchers configuration can be used to run external # watchers to your application. For example, we use it # with webpack to recompile .js and .css sources. -config :matrix_server, MatrixServerWeb.Endpoint, +config :architex, ArchitexWeb.Endpoint, http: [port: port], debug_errors: true, code_reloader: true, @@ -59,5 +59,5 @@ config :phoenix, :stacktrace_depth, 20 # Initialize plugs at runtime for faster development compilation config :phoenix, :plug_init_mode, :runtime -config :matrix_server, server_name: "#{hostname}:#{port}" -config :matrix_server, private_key_file: "keys/id_ed25519" +config :architex, server_name: "#{hostname}:#{port}" +config :architex, private_key_file: "keys/id_ed25519" diff --git a/config/prod.exs b/config/prod.exs index f9737cc..64a929d 100644 --- a/config/prod.exs +++ b/config/prod.exs @@ -9,7 +9,7 @@ use Mix.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 :matrix_server, MatrixServerWeb.Endpoint, +config :architex, ArchitexWeb.Endpoint, url: [host: "example.com", port: 80], cache_static_manifest: "priv/static/cache_manifest.json" @@ -21,7 +21,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 :matrix_server, MatrixServerWeb.Endpoint, +# config :architex, ArchitexWeb.Endpoint, # ... # url: [host: "example.com", port: 443], # https: [ @@ -45,7 +45,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 :matrix_server, MatrixServerWeb.Endpoint, +# config :architex, ArchitexWeb.Endpoint, # force_ssl: [hsts: true] # # Check `Plug.SSL` for all available options in `force_ssl`. diff --git a/config/prod.secret.exs b/config/prod.secret.exs index e4c5402..07c42bd 100644 --- a/config/prod.secret.exs +++ b/config/prod.secret.exs @@ -11,7 +11,7 @@ database_url = For example: ecto://USER:PASS@HOST/DATABASE """ -config :matrix_server, MatrixServer.Repo, +config :architex, Architex.Repo, # ssl: true, url: database_url, pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10") @@ -23,7 +23,7 @@ secret_key_base = You can generate one by calling: mix phx.gen.secret """ -config :matrix_server, MatrixServerWeb.Endpoint, +config :architex, ArchitexWeb.Endpoint, http: [ port: String.to_integer(System.get_env("PORT") || "4000"), transport_options: [socket_opts: [:inet6]] @@ -35,7 +35,7 @@ config :matrix_server, MatrixServerWeb.Endpoint, # If you are doing OTP releases, you need to instruct Phoenix # to start each relevant endpoint: # -# config :matrix_server, MatrixServerWeb.Endpoint, server: true +# config :architex, ArchitexWeb.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 5a80575..a0c8d13 100644 --- a/config/test.exs +++ b/config/test.exs @@ -8,21 +8,21 @@ port = System.get_env("PORT") || 4000 # 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 :matrix_server, MatrixServer.Repo, - username: "matrix_server", - password: "matrix_server", - database: "matrix_server_test#{System.get_env("MIX_TEST_PARTITION")}", +config :architex, Architex.Repo, + username: "architex", + password: "architex", + database: "architex_test#{System.get_env("MIX_TEST_PARTITION")}", hostname: hostname, pool: Ecto.Adapters.SQL.Sandbox # We don't run a server during test. If one is required, # you can enable the server option below. -config :matrix_server, MatrixServerWeb.Endpoint, +config :architex, ArchitexWeb.Endpoint, http: [port: port], server: false # Print only warnings and errors during test config :logger, level: :warn -config :matrix_server, server_name: "#{hostname}:#{port}" -config :matrix_server, private_key_file: "keys/id_ed25519" +config :architex, server_name: "#{hostname}:#{port}" +config :architex, private_key_file: "keys/id_ed25519" diff --git a/element.sh b/element.sh new file mode 100755 index 0000000..e479e6f --- /dev/null +++ b/element.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker run --rm -d -p ${1-80}:80 vectorim/element-web diff --git a/lib/matrix_server.ex b/lib/architex.ex similarity index 96% rename from lib/matrix_server.ex rename to lib/architex.ex index 29adb31..8e282c7 100644 --- a/lib/matrix_server.ex +++ b/lib/architex.ex @@ -1,9 +1,9 @@ -defmodule MatrixServer do +defmodule Architex do @moduledoc """ Utility functions used throughout the project. """ - alias MatrixServer.EncodableMap + alias Architex.EncodableMap @random_string_alphabet Enum.into(?a..?z, []) ++ Enum.into(?A..?Z, []) @ipv6_regex ~r/^\[(?[^\]]+)\](?:\d{1,5})?$/ @@ -24,7 +24,7 @@ defmodule MatrixServer do """ @spec server_name() :: String.t() def server_name do - Application.get_env(:matrix_server, :server_name) + Application.get_env(:architex, :server_name) end @doc """ @@ -171,12 +171,12 @@ defmodule MatrixServer do """ @spec add_signature(map(), String.t(), String.t()) :: map() def add_signature(object, key_id, sig) when not is_map_key(object, :signatures) do - Map.put(object, :signatures, %{MatrixServer.server_name() => %{key_id => sig}}) + Map.put(object, :signatures, %{Architex.server_name() => %{key_id => sig}}) end def add_signature(%{signatures: sigs} = object, key_id, sig) do new_sigs = - Map.update(sigs, MatrixServer.server_name(), %{key_id => sig}, &Map.put(&1, key_id, sig)) + Map.update(sigs, Architex.server_name(), %{key_id => sig}, &Map.put(&1, key_id, sig)) %{object | signatures: new_sigs} end diff --git a/lib/architex/application.ex b/lib/architex/application.ex new file mode 100644 index 0000000..38e733a --- /dev/null +++ b/lib/architex/application.ex @@ -0,0 +1,29 @@ +defmodule Architex.Application do + # See https://hexdocs.pm/elixir/Application.html + # for more information on OTP Applications + @moduledoc false + + use Application + + def start(_type, _args) do + children = [ + Architex.Repo, + ArchitexWeb.Telemetry, + {Phoenix.PubSub, name: Architex.PubSub}, + ArchitexWeb.Endpoint, + {Registry, keys: :unique, name: Architex.RoomServer.Registry}, + {DynamicSupervisor, name: Architex.RoomServer.Supervisor, strategy: :one_for_one}, + Architex.KeyServer, + {Finch, name: ArchitexWeb.HTTPClient} + ] + + Supervisor.start_link(children, name: Architex.Supervisor, strategy: :one_for_one) + end + + # Tell Phoenix to update the endpoint configuration + # whenever the application is updated. + def config_change(changed, _new, removed) do + ArchitexWeb.Endpoint.config_change(changed, removed) + :ok + end +end diff --git a/lib/matrix_server/check.ex b/lib/architex/check.ex similarity index 53% rename from lib/matrix_server/check.ex rename to lib/architex/check.ex index b62d5a2..431a3c3 100644 --- a/lib/matrix_server/check.ex +++ b/lib/architex/check.ex @@ -1,7 +1,7 @@ -defmodule MatrixServer.Check do +defmodule Architex.Check do import Ecto.Query - alias MatrixServer.{Repo, Account, Room} - alias MatrixServerWeb.Client.Request.CreateRoom + alias Architex.{Repo, Account, Room} + alias ArchitexWeb.Client.Request.CreateRoom def create_room do account = Repo.one!(from a in Account, limit: 1) diff --git a/lib/matrix_server/encodable_map.ex b/lib/architex/encodable_map.ex similarity index 82% rename from lib/matrix_server/encodable_map.ex rename to lib/architex/encodable_map.ex index d62ea88..5c67439 100644 --- a/lib/matrix_server/encodable_map.ex +++ b/lib/architex/encodable_map.ex @@ -1,7 +1,7 @@ # https://github.com/michalmuskala/jason/issues/69 -defmodule MatrixServer.EncodableMap do - alias MatrixServer.EncodableMap - alias MatrixServer.Types.{UserId, RoomId, EventId, GroupId, AliasId} +defmodule Architex.EncodableMap do + alias Architex.EncodableMap + alias Architex.Types.{UserId, RoomId, EventId, GroupId, AliasId} defstruct pairs: [] diff --git a/lib/matrix_server/key_server.ex b/lib/architex/key_server.ex similarity index 89% rename from lib/matrix_server/key_server.ex rename to lib/architex/key_server.ex index fb4ba83..b8d40d3 100644 --- a/lib/matrix_server/key_server.ex +++ b/lib/architex/key_server.ex @@ -1,4 +1,4 @@ -defmodule MatrixServer.KeyServer do +defmodule Architex.KeyServer do @moduledoc """ A GenServer holding the homeserver's keys, and responsible for signing objects. @@ -54,7 +54,7 @@ defmodule MatrixServer.KeyServer do end def handle_call(:get_own_signing_keys, _from, %{public_key: public_key} = state) do - encoded_key = MatrixServer.encode_unpadded_base64(public_key) + encoded_key = Architex.encode_unpadded_base64(public_key) {:reply, [{@signing_key_id, encoded_key}], state} end @@ -64,11 +64,11 @@ defmodule MatrixServer.KeyServer do defp sign_object(object, private_key) do object = Map.drop(object, [:signatures, :unsigned]) - with {:ok, json} <- MatrixServer.encode_canonical_json(object) do + with {:ok, json} <- Architex.encode_canonical_json(object) do signature = json |> :enacl.sign_detached(private_key) - |> MatrixServer.encode_unpadded_base64() + |> Architex.encode_unpadded_base64() {:ok, signature} end @@ -78,7 +78,7 @@ defmodule MatrixServer.KeyServer do @spec read_keys() :: {binary(), binary()} defp read_keys do raw_priv_key = - Application.get_env(:matrix_server, :private_key_file) + Application.get_env(:architex, :private_key_file) |> File.read!() "-----BEGIN OPENSSH PRIVATE KEY-----\n" <> rest = raw_priv_key diff --git a/lib/architex/repo.ex b/lib/architex/repo.ex new file mode 100644 index 0000000..6658b25 --- /dev/null +++ b/lib/architex/repo.ex @@ -0,0 +1,5 @@ +defmodule Architex.Repo do + use Ecto.Repo, + otp_app: :architex, + adapter: Ecto.Adapters.Postgres +end diff --git a/lib/matrix_server/room_server.ex b/lib/architex/room_server.ex similarity index 97% rename from lib/matrix_server/room_server.ex rename to lib/architex/room_server.ex index 54dd12f..aaccbc8 100644 --- a/lib/matrix_server/room_server.ex +++ b/lib/architex/room_server.ex @@ -1,4 +1,4 @@ -defmodule MatrixServer.RoomServer do +defmodule Architex.RoomServer do @moduledoc """ A GenServer to hold and manipulate the state of a Matrix room. @@ -13,7 +13,7 @@ defmodule MatrixServer.RoomServer do import Ecto.Query import Ecto.Changeset - alias MatrixServer.{ + alias Architex.{ Repo, Room, Event, @@ -24,11 +24,11 @@ defmodule MatrixServer.RoomServer do DeviceTransaction } - alias MatrixServer.StateResolution.Authorization - alias MatrixServerWeb.Client.Request.{CreateRoom, Kick, Ban} + alias Architex.StateResolution.Authorization + alias ArchitexWeb.Client.Request.{CreateRoom, Kick, Ban} - @registry MatrixServer.RoomServer.Registry - @supervisor MatrixServer.RoomServer.Supervisor + @registry Architex.RoomServer.Registry + @supervisor Architex.RoomServer.Supervisor ### Interface @@ -215,7 +215,7 @@ defmodule MatrixServer.RoomServer do result = Enum.any?(state_set, fn {{"m.room.member", user_id}, %Event{content: %{"membership" => "join"}}} -> - MatrixServer.get_domain(user_id) == domain + Architex.get_domain(user_id) == domain _ -> false @@ -607,19 +607,19 @@ defmodule MatrixServer.RoomServer do # Update local accounts' room membership if applicable. @spec update_joined_rooms(Room.t(), t()) :: JoinedRoom.t() | nil defp update_joined_rooms(%Room{id: room_id}, state_set) do - server_name = MatrixServer.server_name() + server_name = Architex.server_name() {joined, not_joined} = state_set |> Enum.filter(fn {{type, state_key}, _} -> - type == "m.room.member" and MatrixServer.get_domain(state_key) == server_name + type == "m.room.member" and Architex.get_domain(state_key) == server_name end) |> Enum.split_with(fn {_, %Event{content: %{"membership" => membership}}} -> membership == "join" end) map_localparts = - &Enum.map(&1, fn {{_, state_key}, _} -> MatrixServer.get_localpart(state_key) end) + &Enum.map(&1, fn {{_, state_key}, _} -> Architex.get_localpart(state_key) end) joined_localparts = map_localparts.(joined) not_joined_localparts = map_localparts.(not_joined) diff --git a/lib/matrix_server/schema/account.ex b/lib/architex/schema/account.ex similarity index 89% rename from lib/matrix_server/schema/account.ex rename to lib/architex/schema/account.ex index fbf2389..56d7c66 100644 --- a/lib/matrix_server/schema/account.ex +++ b/lib/architex/schema/account.ex @@ -1,10 +1,10 @@ -defmodule MatrixServer.Account do +defmodule Architex.Account do use Ecto.Schema import Ecto.{Changeset, Query} - alias MatrixServer.{Repo, Account, Device, Room, JoinedRoom} - alias MatrixServerWeb.Client.Request.{Register, Login} + alias Architex.{Repo, Account, Device, Room, JoinedRoom} + alias ArchitexWeb.Client.Request.{Register, Login} alias Ecto.{Multi, Changeset} @type t :: %__MODULE__{ @@ -30,7 +30,7 @@ defmodule MatrixServer.Account do """ @spec available?(String.t()) :: :ok | {:error, :user_in_use | :invalid_username} def available?(localpart) when is_binary(localpart) do - if Regex.match?(MatrixServer.localpart_regex(), localpart) and + if Regex.match?(Architex.localpart_regex(), localpart) and String.length(localpart) <= localpart_length() do if Repo.one!( Account @@ -56,7 +56,7 @@ defmodule MatrixServer.Account do initial_device_display_name: initial_device_display_name, password: password }) do - localpart = username || MatrixServer.random_string(10, ?a..?z) + localpart = username || Architex.random_string(10, ?a..?z) account_params = %{ localpart: localpart, @@ -126,7 +126,7 @@ defmodule MatrixServer.Account do |> cast(params, [:localpart, :password_hash]) |> validate_required([:localpart, :password_hash]) |> validate_length(:password_hash, max: 60) - |> validate_format(:localpart, MatrixServer.localpart_regex()) + |> validate_format(:localpart, Architex.localpart_regex()) |> validate_length(:localpart, max: localpart_length()) |> unique_constraint(:localpart, name: :accounts_localpart_index) end @@ -134,7 +134,7 @@ defmodule MatrixServer.Account do @spec localpart_length :: integer() defp localpart_length do # Subtract the "@" and ":" in the MXID. - @max_mxid_length - 2 - String.length(MatrixServer.server_name()) + @max_mxid_length - 2 - String.length(Architex.server_name()) end @spec try_get_localpart(String.t()) :: String.t() @@ -152,6 +152,6 @@ defmodule MatrixServer.Account do """ @spec get_mxid(Account.t()) :: String.t() def get_mxid(%Account{localpart: localpart}) do - "@" <> localpart <> ":" <> MatrixServer.server_name() + "@" <> localpart <> ":" <> Architex.server_name() end end diff --git a/lib/matrix_server/schema/alias.ex b/lib/architex/schema/alias.ex similarity index 90% rename from lib/matrix_server/schema/alias.ex rename to lib/architex/schema/alias.ex index a33d423..f82c921 100644 --- a/lib/matrix_server/schema/alias.ex +++ b/lib/architex/schema/alias.ex @@ -1,9 +1,9 @@ -defmodule MatrixServer.Alias do +defmodule Architex.Alias do use Ecto.Schema import Ecto.Changeset - alias MatrixServer.{Repo, Alias, Room} + alias Architex.{Repo, Alias, Room} alias Ecto.Changeset @primary_key {:alias, :string, []} diff --git a/lib/matrix_server/schema/device.ex b/lib/architex/schema/device.ex similarity index 88% rename from lib/matrix_server/schema/device.ex rename to lib/architex/schema/device.ex index 0c8b80b..62b8833 100644 --- a/lib/matrix_server/schema/device.ex +++ b/lib/architex/schema/device.ex @@ -1,10 +1,10 @@ -defmodule MatrixServer.Device do +defmodule Architex.Device do use Ecto.Schema import Ecto.{Changeset, Query} - alias MatrixServer.{Account, Device, Repo, DeviceTransaction} - alias MatrixServerWeb.Client.Request.Login + alias Architex.{Account, Device, Repo, DeviceTransaction} + alias ArchitexWeb.Client.Request.Login @type t :: %__MODULE__{ device_id: String.t(), @@ -30,7 +30,7 @@ defmodule MatrixServer.Device do end def generate_access_token(localpart, device_id) do - Phoenix.Token.encrypt(MatrixServerWeb.Endpoint, "access_token", {localpart, device_id}) + Phoenix.Token.encrypt(ArchitexWeb.Endpoint, "access_token", {localpart, device_id}) end def generate_device_id(localpart) do diff --git a/lib/matrix_server/schema/device_transaction.ex b/lib/architex/schema/device_transaction.ex similarity index 80% rename from lib/matrix_server/schema/device_transaction.ex rename to lib/architex/schema/device_transaction.ex index 5d2d4a9..6b243b2 100644 --- a/lib/matrix_server/schema/device_transaction.ex +++ b/lib/architex/schema/device_transaction.ex @@ -1,7 +1,7 @@ -defmodule MatrixServer.DeviceTransaction do +defmodule Architex.DeviceTransaction do use Ecto.Schema - alias MatrixServer.Device + alias Architex.Device @type t :: %__MODULE__{ txn_id: String.t(), diff --git a/lib/matrix_server/schema/event.ex b/lib/architex/schema/event.ex similarity index 92% rename from lib/matrix_server/schema/event.ex rename to lib/architex/schema/event.ex index 77b7000..8bd8334 100644 --- a/lib/matrix_server/schema/event.ex +++ b/lib/architex/schema/event.ex @@ -1,10 +1,10 @@ -defmodule MatrixServer.Event do +defmodule Architex.Event do use Ecto.Schema import Ecto.Query - alias MatrixServer.{Repo, Room, Event, Account, EncodableMap, KeyServer} - alias MatrixServer.Types.UserId + alias Architex.{Repo, Room, Event, Account, EncodableMap, KeyServer} + alias Architex.Types.UserId # TODO: Could refactor to also always set prev_events, but not necessary. @type t :: %__MODULE__{ @@ -66,7 +66,7 @@ defmodule MatrixServer.Event do def new(%Room{id: room_id}, %Account{localpart: localpart}) do %Event{ room_id: room_id, - sender: %UserId{localpart: localpart, domain: MatrixServer.server_name()}, + sender: %UserId{localpart: localpart, domain: Architex.server_name()}, origin_server_ts: DateTime.utc_now() |> DateTime.to_unix(:millisecond), prev_events: [], auth_events: [] @@ -119,7 +119,7 @@ defmodule MatrixServer.Event do # Check rules: 1.1, 1.2 prev_events == [] and auth_events == [] and - domain == MatrixServer.get_domain(room_id) + domain == Architex.get_domain(room_id) end def prevalidate(%Event{auth_events: auth_event_ids, prev_events: prev_event_ids} = event) do @@ -138,7 +138,7 @@ defmodule MatrixServer.Event do # Check rules: 2.1, 2.2, 3 length(auth_events) == length(auth_event_ids) and length(prev_events) == length(prev_event_ids) and - not MatrixServer.has_duplicates?(state_pairs) and + not Architex.has_duplicates?(state_pairs) and valid_auth_events?(event, auth_events) and Enum.find_value(state_pairs, false, &(&1 == {"m.room.create", ""})) and do_prevalidate(event, auth_events, prev_events) @@ -152,7 +152,7 @@ defmodule MatrixServer.Event do _ ) do # Check rule: 4.2 - domain == MatrixServer.get_domain(state_key) + domain == Architex.get_domain(state_key) end # Rule 5.1 is left to changeset validation. @@ -222,7 +222,7 @@ defmodule MatrixServer.Event do defp calculate_content_hash(event) do m = event - |> MatrixServer.to_serializable_map() + |> Architex.to_serializable_map() |> Map.drop([:unsigned, :signature, :hashes]) |> EncodableMap.from_map() @@ -235,7 +235,7 @@ defmodule MatrixServer.Event do defp redact(%Event{type: type, content: content} = event) do redacted_event = event - |> MatrixServer.to_serializable_map() + |> Architex.to_serializable_map() |> Map.take([ :event_id, :type, @@ -285,11 +285,11 @@ defmodule MatrixServer.Event do @spec post_process(t()) :: {:ok, t()} | :error def post_process(event) do with {:ok, content_hash} <- calculate_content_hash(event) do - encoded_hash = MatrixServer.encode_unpadded_base64(content_hash) + encoded_hash = Architex.encode_unpadded_base64(content_hash) event = %Event{event | hashes: %{"sha256" => encoded_hash}} with {:ok, sig, key_id} <- KeyServer.sign_object(redact(event)) do - event = %Event{event | signatures: %{MatrixServer.server_name() => %{key_id => sig}}} + event = %Event{event | signatures: %{Architex.server_name() => %{key_id => sig}}} with {:ok, event} <- set_event_id(event) do {:ok, event} @@ -312,7 +312,7 @@ defmodule MatrixServer.Event do @spec generate_event_id(t()) :: {:ok, String.t()} | {:error, Jason.EncodeError.t()} defp generate_event_id(event) do with {:ok, hash} <- calculate_reference_hash(event) do - {:ok, "$" <> MatrixServer.encode_url_safe_base64(hash)} + {:ok, "$" <> Architex.encode_url_safe_base64(hash)} end end @@ -323,7 +323,7 @@ defmodule MatrixServer.Event do |> redact() |> Map.drop([:unsigned, :signature, :age_ts]) - with {:ok, json} <- MatrixServer.encode_canonical_json(redacted_event) do + with {:ok, json} <- Architex.encode_canonical_json(redacted_event) do {:ok, :crypto.hash(:sha256, json)} end end diff --git a/lib/matrix_server/schema/event/generators.ex b/lib/architex/schema/event/generators.ex similarity index 76% rename from lib/matrix_server/schema/event/generators.ex rename to lib/architex/schema/event/generators.ex index 85a3297..92bae47 100644 --- a/lib/matrix_server/schema/event/generators.ex +++ b/lib/architex/schema/event/generators.ex @@ -1,9 +1,9 @@ -defmodule MatrixServer.Event.Join do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.Join do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t()) :: Event.t() def new(room, %Account{localpart: localpart} = sender) do - mxid = MatrixServer.get_mxid(localpart) + mxid = Architex.get_mxid(localpart) %Event{ Event.new(room, sender) @@ -16,12 +16,12 @@ defmodule MatrixServer.Event.Join do end end -defmodule MatrixServer.Event.CreateRoom do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.CreateRoom do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t(), String.t()) :: Event.t() def new(room, %Account{localpart: localpart} = creator, room_version) do - mxid = MatrixServer.get_mxid(localpart) + mxid = Architex.get_mxid(localpart) %Event{ Event.new(room, creator) @@ -29,18 +29,18 @@ defmodule MatrixServer.Event.CreateRoom do state_key: "", content: %{ "creator" => mxid, - "room_version" => room_version || MatrixServer.default_room_version() + "room_version" => room_version || Architex.default_room_version() } } end end -defmodule MatrixServer.Event.PowerLevels do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.PowerLevels do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t()) :: Event.t() def new(room, %Account{localpart: localpart} = sender) do - mxid = MatrixServer.get_mxid(localpart) + mxid = Architex.get_mxid(localpart) %Event{ Event.new(room, sender) @@ -66,8 +66,8 @@ defmodule MatrixServer.Event.PowerLevels do end end -defmodule MatrixServer.Event.Name do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.Name do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t(), String.t()) :: Event.t() def new(room, sender, name) do @@ -82,8 +82,8 @@ defmodule MatrixServer.Event.Name do end end -defmodule MatrixServer.Event.Topic do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.Topic do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t(), String.t()) :: Event.t() def new(room, sender, topic) do @@ -98,8 +98,8 @@ defmodule MatrixServer.Event.Topic do end end -defmodule MatrixServer.Event.JoinRules do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.JoinRules do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t(), String.t()) :: Event.t() def new(room, sender, join_rule) do @@ -114,8 +114,8 @@ defmodule MatrixServer.Event.JoinRules do end end -defmodule MatrixServer.Event.HistoryVisibility do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.HistoryVisibility do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t(), String.t()) :: Event.t() def new(room, sender, history_visibility) do @@ -130,8 +130,8 @@ defmodule MatrixServer.Event.HistoryVisibility do end end -defmodule MatrixServer.Event.GuestAccess do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.GuestAccess do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t(), String.t()) :: Event.t() def new(room, sender, guest_access) do @@ -146,8 +146,8 @@ defmodule MatrixServer.Event.GuestAccess do end end -defmodule MatrixServer.Event.Invite do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.Invite do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t(), String.t()) :: Event.t() def new(room, sender, user_id) do @@ -162,8 +162,8 @@ defmodule MatrixServer.Event.Invite do end end -defmodule MatrixServer.Event.Leave do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.Leave do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t()) :: Event.t() def new(room, sender) do @@ -178,8 +178,8 @@ defmodule MatrixServer.Event.Leave do end end -defmodule MatrixServer.Event.Kick do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.Kick do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t(), String.t(), String.t() | nil) :: Event.t() def new(room, sender, user_id, reason \\ nil) do @@ -195,8 +195,8 @@ defmodule MatrixServer.Event.Kick do end end -defmodule MatrixServer.Event.Ban do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.Ban do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t(), String.t(), String.t() | nil) :: Event.t() def new(room, sender, user_id, reason \\ nil) do @@ -212,8 +212,8 @@ defmodule MatrixServer.Event.Ban do end end -defmodule MatrixServer.Event.Unban do - alias MatrixServer.{Event, Account, Room} +defmodule Architex.Event.Unban do + alias Architex.{Event, Account, Room} @spec new(Room.t(), Account.t(), String.t()) :: Event.t() def new(room, sender, user_id) do %Event{ diff --git a/lib/matrix_server/schema/joined_room.ex b/lib/architex/schema/joined_room.ex similarity index 79% rename from lib/matrix_server/schema/joined_room.ex rename to lib/architex/schema/joined_room.ex index aef884b..0250031 100644 --- a/lib/matrix_server/schema/joined_room.ex +++ b/lib/architex/schema/joined_room.ex @@ -1,7 +1,7 @@ -defmodule MatrixServer.JoinedRoom do +defmodule Architex.JoinedRoom do use Ecto.Schema - alias MatrixServer.{Account, Room} + alias Architex.{Account, Room} @type t :: %__MODULE__{ account_id: integer(), diff --git a/lib/matrix_server/schema/room.ex b/lib/architex/schema/room.ex similarity index 88% rename from lib/matrix_server/schema/room.ex rename to lib/architex/schema/room.ex index e4a3cec..5606f6c 100644 --- a/lib/matrix_server/schema/room.ex +++ b/lib/architex/schema/room.ex @@ -1,11 +1,11 @@ -defmodule MatrixServer.Room do +defmodule Architex.Room do use Ecto.Schema import Ecto.Changeset import Ecto.Query - alias MatrixServer.{Repo, Room, Event, Alias, RoomServer} - alias MatrixServerWeb.Client.Request.CreateRoom + alias Architex.{Repo, Room, Event, Alias, RoomServer} + alias ArchitexWeb.Client.Request.CreateRoom @type t :: %__MODULE__{ visibility: :public | :private, @@ -34,7 +34,7 @@ defmodule MatrixServer.Room do end def generate_room_id do - "!" <> MatrixServer.random_string(18) <> ":" <> MatrixServer.server_name() + "!" <> Architex.random_string(18) <> ":" <> Architex.server_name() end def update_forward_extremities( diff --git a/lib/matrix_server/schema/server_key_info.ex b/lib/architex/schema/server_key_info.ex similarity index 89% rename from lib/matrix_server/schema/server_key_info.ex rename to lib/architex/schema/server_key_info.ex index 539ac67..ba8aa3b 100644 --- a/lib/matrix_server/schema/server_key_info.ex +++ b/lib/architex/schema/server_key_info.ex @@ -1,11 +1,11 @@ -defmodule MatrixServer.ServerKeyInfo do +defmodule Architex.ServerKeyInfo do use Ecto.Schema import Ecto.Query - alias MatrixServer.{Repo, ServerKeyInfo, SigningKey} - alias MatrixServerWeb.Federation.HTTPClient - alias MatrixServerWeb.Federation.Request.GetSigningKeys + alias Architex.{Repo, ServerKeyInfo, SigningKey} + alias ArchitexWeb.Federation.HTTPClient + alias ArchitexWeb.Federation.Request.GetSigningKeys alias Ecto.Multi @primary_key {:server_name, :string, []} @@ -53,7 +53,7 @@ defmodule MatrixServer.ServerKeyInfo do ski = %ServerKeyInfo{ server_name: server_name, valid_until: - MatrixServer.min_datetime(in_a_week, valid_until) |> DateTime.to_unix(:millisecond) + Architex.min_datetime(in_a_week, valid_until) |> DateTime.to_unix(:millisecond) } case upsert_multi(server_name, ski, signing_keys) |> Repo.transaction() do diff --git a/lib/matrix_server/schema/signing_key.ex b/lib/architex/schema/signing_key.ex similarity index 89% rename from lib/matrix_server/schema/signing_key.ex rename to lib/architex/schema/signing_key.ex index 3e407f1..53789c2 100644 --- a/lib/matrix_server/schema/signing_key.ex +++ b/lib/architex/schema/signing_key.ex @@ -1,10 +1,10 @@ -defmodule MatrixServer.SigningKey do +defmodule Architex.SigningKey do use Ecto.Schema import Ecto.Changeset import Ecto.Query - alias MatrixServer.{Repo, SigningKey, ServerKeyInfo} + alias Architex.{Repo, SigningKey, ServerKeyInfo} @primary_key false schema "signing_keys" do diff --git a/lib/matrix_server/state_resolution.ex b/lib/architex/state_resolution.ex similarity index 98% rename from lib/matrix_server/state_resolution.ex rename to lib/architex/state_resolution.ex index 74893b8..90ba117 100644 --- a/lib/matrix_server/state_resolution.ex +++ b/lib/architex/state_resolution.ex @@ -1,4 +1,4 @@ -defmodule MatrixServer.StateResolution do +defmodule Architex.StateResolution do @moduledoc """ Functions for resolving the state of a Matrix room. @@ -20,8 +20,8 @@ defmodule MatrixServer.StateResolution do import Ecto.Query - alias MatrixServer.{Repo, Event, Room} - alias MatrixServer.StateResolution.Authorization + alias Architex.{Repo, Event, Room} + alias Architex.StateResolution.Authorization @type state_set :: map() diff --git a/lib/matrix_server/state_resolution/authorization.ex b/lib/architex/state_resolution/authorization.ex similarity index 97% rename from lib/matrix_server/state_resolution/authorization.ex rename to lib/architex/state_resolution/authorization.ex index 6559ff2..791b5c2 100644 --- a/lib/matrix_server/state_resolution/authorization.ex +++ b/lib/architex/state_resolution/authorization.ex @@ -1,17 +1,17 @@ -defmodule MatrixServer.StateResolution.Authorization do +defmodule Architex.StateResolution.Authorization do @moduledoc """ Implementation of Matrix event authorization rules for state resolution. Note that some authorization rules are already checked in - `MatrixServer.Event.prevalidate/1` so they are skipped here. + `Architex.Event.prevalidate/1` so they are skipped here. """ - import MatrixServer.StateResolution + import Architex.StateResolution import Ecto.Query - alias MatrixServer.{Repo, Event} - alias MatrixServer.Types.UserId - alias MatrixServer.StateResolution, as: StateRes + alias Architex.{Repo, Event} + alias Architex.Types.UserId + alias Architex.StateResolution, as: StateRes @typep action :: :invite | :ban | :redact | :kick | {:event, Event.t()} diff --git a/lib/matrix_server/types/alias_id.ex b/lib/architex/types/alias_id.ex similarity index 88% rename from lib/matrix_server/types/alias_id.ex rename to lib/architex/types/alias_id.ex index 74dd299..4345058 100644 --- a/lib/matrix_server/types/alias_id.ex +++ b/lib/architex/types/alias_id.ex @@ -1,7 +1,7 @@ -defmodule MatrixServer.Types.AliasId do +defmodule Architex.Types.AliasId do use Ecto.Type - alias MatrixServer.Types.AliasId + alias Architex.Types.AliasId defstruct [:localpart, :domain] @@ -17,7 +17,7 @@ defmodule MatrixServer.Types.AliasId do with "#" <> rest <- s, [localpart, domain] <- String.split(rest, ":", parts: 2) do if String.length(localpart) + String.length(domain) + 2 <= 255 and - MatrixServer.valid_domain?(domain) do + Architex.valid_domain?(domain) do {:ok, %AliasId{localpart: localpart, domain: domain}} else :error diff --git a/lib/matrix_server/types/event_id.ex b/lib/architex/types/event_id.ex similarity index 89% rename from lib/matrix_server/types/event_id.ex rename to lib/architex/types/event_id.ex index 7dc9d4d..c38f3bb 100644 --- a/lib/matrix_server/types/event_id.ex +++ b/lib/architex/types/event_id.ex @@ -1,7 +1,7 @@ -defmodule MatrixServer.Types.EventId do +defmodule Architex.Types.EventId do use Ecto.Type - alias MatrixServer.Types.EventId + alias Architex.Types.EventId defstruct [:id] diff --git a/lib/matrix_server/types/group_id.ex b/lib/architex/types/group_id.ex similarity index 89% rename from lib/matrix_server/types/group_id.ex rename to lib/architex/types/group_id.ex index 542e03c..b2d4346 100644 --- a/lib/matrix_server/types/group_id.ex +++ b/lib/architex/types/group_id.ex @@ -1,7 +1,7 @@ -defmodule MatrixServer.Types.GroupId do +defmodule Architex.Types.GroupId do use Ecto.Type - alias MatrixServer.Types.GroupId + alias Architex.Types.GroupId defstruct [:localpart, :domain] @@ -20,7 +20,7 @@ defmodule MatrixServer.Types.GroupId do [localpart, domain] <- String.split(rest, ":", parts: 2) do if String.length(localpart) + String.length(domain) + 2 <= 255 and Regex.match?(@localpart_regex, localpart) and - MatrixServer.valid_domain?(domain) do + Architex.valid_domain?(domain) do {:ok, %GroupId{localpart: localpart, domain: domain}} else :error diff --git a/lib/matrix_server/types/room_id.ex b/lib/architex/types/room_id.ex similarity index 87% rename from lib/matrix_server/types/room_id.ex rename to lib/architex/types/room_id.ex index c4b266a..1711d41 100644 --- a/lib/matrix_server/types/room_id.ex +++ b/lib/architex/types/room_id.ex @@ -1,7 +1,7 @@ -defmodule MatrixServer.Types.RoomId do +defmodule Architex.Types.RoomId do use Ecto.Type - alias MatrixServer.Types.RoomId + alias Architex.Types.RoomId defstruct [:localpart, :domain] @@ -16,7 +16,7 @@ defmodule MatrixServer.Types.RoomId do def cast(s) when is_binary(s) do with "!" <> rest <- s, [localpart, domain] <- String.split(rest, ":", parts: 2) do - if MatrixServer.valid_domain?(domain) do + if Architex.valid_domain?(domain) do {:ok, %RoomId{localpart: localpart, domain: domain}} else :error diff --git a/lib/matrix_server/types/user_id.ex b/lib/architex/types/user_id.ex similarity index 87% rename from lib/matrix_server/types/user_id.ex rename to lib/architex/types/user_id.ex index 1797a68..d4754ef 100644 --- a/lib/matrix_server/types/user_id.ex +++ b/lib/architex/types/user_id.ex @@ -1,7 +1,7 @@ -defmodule MatrixServer.Types.UserId do +defmodule Architex.Types.UserId do use Ecto.Type - alias MatrixServer.Types.UserId + alias Architex.Types.UserId @type t :: %__MODULE__{ localpart: String.t(), @@ -30,7 +30,7 @@ defmodule MatrixServer.Types.UserId do with "@" <> rest <- s, [localpart, domain] <- String.split(rest, ":", parts: 2) do if String.length(localpart) + String.length(domain) + 2 <= 255 and - Regex.match?(@localpart_regex, localpart) and MatrixServer.valid_domain?(domain) do + Regex.match?(@localpart_regex, localpart) and Architex.valid_domain?(domain) do {:ok, %UserId{localpart: localpart, domain: domain}} else :error diff --git a/lib/matrix_server_web.ex b/lib/architex_web.ex similarity index 77% rename from lib/matrix_server_web.ex rename to lib/architex_web.ex index cd014f7..bb660d1 100644 --- a/lib/matrix_server_web.ex +++ b/lib/architex_web.ex @@ -1,12 +1,12 @@ -defmodule MatrixServerWeb do +defmodule ArchitexWeb 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 MatrixServerWeb, :controller - use MatrixServerWeb, :view + use ArchitexWeb, :controller + use ArchitexWeb, :view The definitions below will be executed for every view, controller, etc, so keep them short and clean, focused @@ -19,18 +19,18 @@ defmodule MatrixServerWeb do def controller do quote do - use Phoenix.Controller, namespace: MatrixServerWeb + use Phoenix.Controller, namespace: ArchitexWeb import Plug.Conn - alias MatrixServerWeb.Router.Helpers, as: Routes + alias ArchitexWeb.Router.Helpers, as: Routes end end def view do quote do use Phoenix.View, - root: "lib/matrix_server_web/templates", - namespace: MatrixServerWeb + root: "lib/architex_web/templates", + namespace: ArchitexWeb # Import convenience functions from controllers import Phoenix.Controller, @@ -61,8 +61,8 @@ defmodule MatrixServerWeb do # Import basic rendering functionality (render, render_layout, etc) import Phoenix.View - import MatrixServerWeb.ErrorHelpers - alias MatrixServerWeb.Router.Helpers, as: Routes + import ArchitexWeb.ErrorHelpers + alias ArchitexWeb.Router.Helpers, as: Routes end end diff --git a/lib/matrix_server_web/client/authenticate_client.ex b/lib/architex_web/client/authenticate_client.ex similarity index 85% rename from lib/matrix_server_web/client/authenticate_client.ex rename to lib/architex_web/client/authenticate_client.ex index d72f1e1..994e7ea 100644 --- a/lib/matrix_server_web/client/authenticate_client.ex +++ b/lib/architex_web/client/authenticate_client.ex @@ -1,8 +1,8 @@ -defmodule MatrixServerWeb.Client.Plug.AuthenticateClient do - import MatrixServerWeb.Error +defmodule ArchitexWeb.Client.Plug.AuthenticateClient do + import ArchitexWeb.Error import Plug.Conn - alias MatrixServer.Account + alias Architex.Account alias Plug.Conn def init(opts), do: opts diff --git a/lib/matrix_server_web/client/controllers/account_controller.ex b/lib/architex_web/client/controllers/account_controller.ex similarity index 89% rename from lib/matrix_server_web/client/controllers/account_controller.ex rename to lib/architex_web/client/controllers/account_controller.ex index cb91764..ec2ec39 100644 --- a/lib/matrix_server_web/client/controllers/account_controller.ex +++ b/lib/architex_web/client/controllers/account_controller.ex @@ -1,10 +1,10 @@ -defmodule MatrixServerWeb.Client.AccountController do - use MatrixServerWeb, :controller +defmodule ArchitexWeb.Client.AccountController do + use ArchitexWeb, :controller - import MatrixServer - import MatrixServerWeb.Error + import Architex + import ArchitexWeb.Error - alias MatrixServer.{Account, Repo} + alias Architex.{Account, Repo} alias Plug.Conn @doc """ diff --git a/lib/matrix_server_web/client/controllers/aliases_controller.ex b/lib/architex_web/client/controllers/aliases_controller.ex similarity index 77% rename from lib/matrix_server_web/client/controllers/aliases_controller.ex rename to lib/architex_web/client/controllers/aliases_controller.ex index ce89096..9d59ccc 100644 --- a/lib/matrix_server_web/client/controllers/aliases_controller.ex +++ b/lib/architex_web/client/controllers/aliases_controller.ex @@ -1,9 +1,9 @@ -defmodule MatrixServerWeb.Client.AliasesController do - use MatrixServerWeb, :controller +defmodule ArchitexWeb.Client.AliasesController do + use ArchitexWeb, :controller - import MatrixServerWeb.Error + import ArchitexWeb.Error - alias MatrixServer.Alias + alias Architex.Alias @doc """ Create a new mapping from room alias to room ID. diff --git a/lib/matrix_server_web/client/controllers/info_controller.ex b/lib/architex_web/client/controllers/info_controller.ex similarity index 76% rename from lib/matrix_server_web/client/controllers/info_controller.ex rename to lib/architex_web/client/controllers/info_controller.ex index 1e8bee4..c90743d 100644 --- a/lib/matrix_server_web/client/controllers/info_controller.ex +++ b/lib/architex_web/client/controllers/info_controller.ex @@ -1,7 +1,7 @@ -defmodule MatrixServerWeb.Client.InfoController do - use MatrixServerWeb, :controller +defmodule ArchitexWeb.Client.InfoController do + use ArchitexWeb, :controller - import MatrixServerWeb.Error + import ArchitexWeb.Error @supported_versions ["r0.6.1"] diff --git a/lib/matrix_server_web/client/controllers/login_controller.ex b/lib/architex_web/client/controllers/login_controller.ex similarity index 85% rename from lib/matrix_server_web/client/controllers/login_controller.ex rename to lib/architex_web/client/controllers/login_controller.ex index eb6460a..578c324 100644 --- a/lib/matrix_server_web/client/controllers/login_controller.ex +++ b/lib/architex_web/client/controllers/login_controller.ex @@ -1,11 +1,11 @@ -defmodule MatrixServerWeb.Client.LoginController do - use MatrixServerWeb, :controller +defmodule ArchitexWeb.Client.LoginController do + use ArchitexWeb, :controller - import MatrixServerWeb.Error + import ArchitexWeb.Error import Ecto.Changeset - alias MatrixServer.{Repo, Account, Device} - alias MatrixServerWeb.Client.Request.Login + alias Architex.{Repo, Account, Device} + alias ArchitexWeb.Client.Request.Login alias Ecto.Changeset @login_type "m.login.password" @@ -42,7 +42,7 @@ defmodule MatrixServerWeb.Client.LoginController do {%Account{localpart: localpart}, %Device{access_token: access_token, device_id: device_id}}} -> data = %{ - user_id: MatrixServer.get_mxid(localpart), + user_id: Architex.get_mxid(localpart), access_token: access_token, device_id: device_id } diff --git a/lib/matrix_server_web/client/controllers/register_controller.ex b/lib/architex_web/client/controllers/register_controller.ex similarity index 84% rename from lib/matrix_server_web/client/controllers/register_controller.ex rename to lib/architex_web/client/controllers/register_controller.ex index 9e71e18..e935f17 100644 --- a/lib/matrix_server_web/client/controllers/register_controller.ex +++ b/lib/architex_web/client/controllers/register_controller.ex @@ -1,11 +1,11 @@ -defmodule MatrixServerWeb.Client.RegisterController do - use MatrixServerWeb, :controller +defmodule ArchitexWeb.Client.RegisterController do + use ArchitexWeb, :controller - import MatrixServerWeb.Error + import ArchitexWeb.Error import Ecto.Changeset - alias MatrixServer.{Repo, Account, Device} - alias MatrixServerWeb.Client.Request.Register + alias Architex.{Repo, Account, Device} + alias ArchitexWeb.Client.Request.Register alias Ecto.Changeset @register_type "m.login.dummy" @@ -26,7 +26,7 @@ defmodule MatrixServerWeb.Client.RegisterController do account: %Account{localpart: localpart}, device: %Device{device_id: device_id, access_token: access_token} }} -> - data = %{user_id: MatrixServer.get_mxid(localpart)} + data = %{user_id: Architex.get_mxid(localpart)} data = if not inhibit_login do diff --git a/lib/matrix_server_web/client/controllers/room_controller.ex b/lib/architex_web/client/controllers/room_controller.ex similarity index 95% rename from lib/matrix_server_web/client/controllers/room_controller.ex rename to lib/architex_web/client/controllers/room_controller.ex index e9cc79a..63db0d4 100644 --- a/lib/matrix_server_web/client/controllers/room_controller.ex +++ b/lib/architex_web/client/controllers/room_controller.ex @@ -1,12 +1,12 @@ -defmodule MatrixServerWeb.Client.RoomController do - use MatrixServerWeb, :controller +defmodule ArchitexWeb.Client.RoomController do + use ArchitexWeb, :controller - import MatrixServerWeb.Error + import ArchitexWeb.Error import Ecto.{Changeset, Query} - alias MatrixServer.{Repo, Room, RoomServer} - alias MatrixServer.Types.UserId - alias MatrixServerWeb.Client.Request.{CreateRoom, Kick, Ban} + alias Architex.{Repo, Room, RoomServer} + alias Architex.Types.UserId + alias ArchitexWeb.Client.Request.{CreateRoom, Kick, Ban} alias Ecto.Changeset alias Plug.Conn diff --git a/lib/matrix_server_web/client/controllers/room_directory_controller.ex b/lib/architex_web/client/controllers/room_directory_controller.ex similarity index 90% rename from lib/matrix_server_web/client/controllers/room_directory_controller.ex rename to lib/architex_web/client/controllers/room_directory_controller.ex index b69bfff..15cae8f 100644 --- a/lib/matrix_server_web/client/controllers/room_directory_controller.ex +++ b/lib/architex_web/client/controllers/room_directory_controller.ex @@ -1,10 +1,10 @@ -defmodule MatrixServerWeb.Client.RoomDirectoryController do - use MatrixServerWeb, :controller +defmodule ArchitexWeb.Client.RoomDirectoryController do + use ArchitexWeb, :controller - import MatrixServerWeb.Error + import ArchitexWeb.Error import Ecto.Query - alias MatrixServer.{Repo, Room, RoomServer} + alias Architex.{Repo, Room, RoomServer} alias Plug.Conn @doc """ diff --git a/lib/matrix_server_web/client/request/ban.ex b/lib/architex_web/client/request/ban.ex similarity index 81% rename from lib/matrix_server_web/client/request/ban.ex rename to lib/architex_web/client/request/ban.ex index 8906ae6..ee7f4c7 100644 --- a/lib/matrix_server_web/client/request/ban.ex +++ b/lib/architex_web/client/request/ban.ex @@ -1,5 +1,5 @@ -defmodule MatrixServerWeb.Client.Request.Ban do - use MatrixServerWeb.Request +defmodule ArchitexWeb.Client.Request.Ban do + use ArchitexWeb.Request @type t :: %__MODULE__{ user_id: String.t(), diff --git a/lib/matrix_server_web/client/request/create_room.ex b/lib/architex_web/client/request/create_room.ex similarity index 95% rename from lib/matrix_server_web/client/request/create_room.ex rename to lib/architex_web/client/request/create_room.ex index 4f260c3..33d507e 100644 --- a/lib/matrix_server_web/client/request/create_room.ex +++ b/lib/architex_web/client/request/create_room.ex @@ -1,4 +1,4 @@ -defmodule MatrixServerWeb.Client.Request.CreateRoom do +defmodule ArchitexWeb.Client.Request.CreateRoom do use Ecto.Schema import Ecto.Changeset diff --git a/lib/matrix_server_web/client/request/kick.ex b/lib/architex_web/client/request/kick.ex similarity index 81% rename from lib/matrix_server_web/client/request/kick.ex rename to lib/architex_web/client/request/kick.ex index 18fea6e..5adf307 100644 --- a/lib/matrix_server_web/client/request/kick.ex +++ b/lib/architex_web/client/request/kick.ex @@ -1,5 +1,5 @@ -defmodule MatrixServerWeb.Client.Request.Kick do - use MatrixServerWeb.Request +defmodule ArchitexWeb.Client.Request.Kick do + use ArchitexWeb.Request @type t :: %__MODULE__{ user_id: String.t(), diff --git a/lib/matrix_server_web/client/request/login.ex b/lib/architex_web/client/request/login.ex similarity index 94% rename from lib/matrix_server_web/client/request/login.ex rename to lib/architex_web/client/request/login.ex index e824a8d..915d17e 100644 --- a/lib/matrix_server_web/client/request/login.ex +++ b/lib/architex_web/client/request/login.ex @@ -1,4 +1,4 @@ -defmodule MatrixServerWeb.Client.Request.Login do +defmodule ArchitexWeb.Client.Request.Login do use Ecto.Schema import Ecto.Changeset diff --git a/lib/matrix_server_web/client/request/register.ex b/lib/architex_web/client/request/register.ex similarity index 95% rename from lib/matrix_server_web/client/request/register.ex rename to lib/architex_web/client/request/register.ex index 545f138..edf561b 100644 --- a/lib/matrix_server_web/client/request/register.ex +++ b/lib/architex_web/client/request/register.ex @@ -1,4 +1,4 @@ -defmodule MatrixServerWeb.Client.Request.Register do +defmodule ArchitexWeb.Client.Request.Register do use Ecto.Schema import Ecto.Changeset diff --git a/lib/matrix_server_web/endpoint.ex b/lib/architex_web/endpoint.ex similarity index 81% rename from lib/matrix_server_web/endpoint.ex rename to lib/architex_web/endpoint.ex index 8a8655f..6087854 100644 --- a/lib/matrix_server_web/endpoint.ex +++ b/lib/architex_web/endpoint.ex @@ -1,12 +1,12 @@ -defmodule MatrixServerWeb.Endpoint do - use Phoenix.Endpoint, otp_app: :matrix_server +defmodule ArchitexWeb.Endpoint do + use Phoenix.Endpoint, otp_app: :architex # 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: "_matrix_server_key", + key: "_architex_key", signing_salt: "IGPHtnAo" ] @@ -16,7 +16,7 @@ defmodule MatrixServerWeb.Endpoint do # when deploying your static files in production. plug Plug.Static, at: "/", - from: :matrix_server, + from: :architex, gzip: false, only: ~w(css fonts images js favicon.ico robots.txt) @@ -24,7 +24,7 @@ defmodule MatrixServerWeb.Endpoint do # :code_reloader configuration of your endpoint. if code_reloading? do plug Phoenix.CodeReloader - plug Phoenix.Ecto.CheckRepoStatus, otp_app: :matrix_server + plug Phoenix.Ecto.CheckRepoStatus, otp_app: :architex end plug Plug.RequestId @@ -40,5 +40,5 @@ defmodule MatrixServerWeb.Endpoint do plug Plug.Session, @session_options plug CORSPlug - plug MatrixServerWeb.Router + plug ArchitexWeb.Router end diff --git a/lib/matrix_server_web/error.ex b/lib/architex_web/error.ex similarity index 97% rename from lib/matrix_server_web/error.ex rename to lib/architex_web/error.ex index e5c1001..12a4e9a 100644 --- a/lib/matrix_server_web/error.ex +++ b/lib/architex_web/error.ex @@ -1,4 +1,4 @@ -defmodule MatrixServerWeb.Error do +defmodule ArchitexWeb.Error do import Plug.Conn import Phoenix.Controller, only: [json: 2] diff --git a/lib/matrix_server_web/federation/authenticate_server.ex b/lib/architex_web/federation/authenticate_server.ex similarity index 81% rename from lib/matrix_server_web/federation/authenticate_server.ex rename to lib/architex_web/federation/authenticate_server.ex index b81a0ed..0f7bc37 100644 --- a/lib/matrix_server_web/federation/authenticate_server.ex +++ b/lib/architex_web/federation/authenticate_server.ex @@ -1,7 +1,7 @@ -defmodule MatrixServerWeb.Federation.AuthenticateServer do - import MatrixServerWeb.Error +defmodule ArchitexWeb.Federation.AuthenticateServer do + import ArchitexWeb.Error - alias MatrixServer.{SigningKey, ServerKeyInfo} + alias Architex.{SigningKey, ServerKeyInfo} @auth_header_regex ~r/^X-Matrix origin=(?.*),key="(?.*)",sig="(?.*)"$/ @@ -25,7 +25,7 @@ defmodule MatrixServerWeb.Federation.AuthenticateServer do object_to_sign = %{ uri: uri, method: method, - destination: MatrixServer.server_name() + destination: Architex.server_name() } object_to_sign = @@ -43,13 +43,13 @@ defmodule MatrixServerWeb.Federation.AuthenticateServer do |> Enum.find(:error, fn {origin, _, sig} -> object = object_fun.(origin) - with {:ok, raw_sig} <- MatrixServer.decode_base64(sig), - {:ok, encoded_object} <- MatrixServer.encode_canonical_json(object), + with {:ok, raw_sig} <- Architex.decode_base64(sig), + {:ok, encoded_object} <- Architex.encode_canonical_json(object), {:ok, %ServerKeyInfo{signing_keys: keys}} <- ServerKeyInfo.with_fresh_signing_keys(origin) do Enum.find_value(keys, false, fn %SigningKey{signing_key: signing_key} -> - with {:ok, decoded_key} <- MatrixServer.decode_base64(signing_key) do - MatrixServer.sign_verify(raw_sig, encoded_object, decoded_key) + with {:ok, decoded_key} <- Architex.decode_base64(signing_key) do + Architex.sign_verify(raw_sig, encoded_object, decoded_key) else _ -> false end @@ -81,7 +81,7 @@ defmodule MatrixServerWeb.Federation.AuthenticateServer do action = action_name(conn) if action not in unquote(except) do - case MatrixServerWeb.Federation.AuthenticateServer.authenticate(conn) do + case ArchitexWeb.Federation.AuthenticateServer.authenticate(conn) do {origin, _key, _sig} -> conn = Plug.Conn.assign(conn, :origin, origin) apply(__MODULE__, action, [conn, conn.params]) diff --git a/lib/matrix_server_web/federation/controllers/event_controller.ex b/lib/architex_web/federation/controllers/event_controller.ex similarity index 92% rename from lib/matrix_server_web/federation/controllers/event_controller.ex rename to lib/architex_web/federation/controllers/event_controller.ex index 4779b20..e9562b7 100644 --- a/lib/matrix_server_web/federation/controllers/event_controller.ex +++ b/lib/architex_web/federation/controllers/event_controller.ex @@ -1,12 +1,12 @@ -defmodule MatrixServerWeb.Federation.EventController do - use MatrixServerWeb, :controller - use MatrixServerWeb.Federation.AuthenticateServer +defmodule ArchitexWeb.Federation.EventController do + use ArchitexWeb, :controller + use ArchitexWeb.Federation.AuthenticateServer - import MatrixServerWeb.Error + import ArchitexWeb.Error import Ecto.Query - alias MatrixServer.{Repo, Event, RoomServer} - alias MatrixServerWeb.Federation.Transaction + alias Architex.{Repo, Event, RoomServer} + alias ArchitexWeb.Federation.Transaction @doc """ Retrieves a single event. diff --git a/lib/matrix_server_web/federation/controllers/key_controller.ex b/lib/architex_web/federation/controllers/key_controller.ex similarity index 75% rename from lib/matrix_server_web/federation/controllers/key_controller.ex rename to lib/architex_web/federation/controllers/key_controller.ex index 1185706..135b3ea 100644 --- a/lib/matrix_server_web/federation/controllers/key_controller.ex +++ b/lib/architex_web/federation/controllers/key_controller.ex @@ -1,9 +1,9 @@ -defmodule MatrixServerWeb.Federation.KeyController do - use MatrixServerWeb, :controller +defmodule ArchitexWeb.Federation.KeyController do + use ArchitexWeb, :controller - import MatrixServerWeb.Error + import ArchitexWeb.Error - alias MatrixServer.KeyServer + alias Architex.KeyServer @doc """ Gets the homeserver's published signing keys. @@ -22,7 +22,7 @@ defmodule MatrixServerWeb.Federation.KeyController do valid_until = DateTime.utc_now() |> DateTime.add(60 * 60 * 24 * 30, :second) data = %{ - server_name: MatrixServer.server_name(), + server_name: Architex.server_name(), verify_keys: keys, old_verify_keys: %{}, valid_until_ts: DateTime.to_unix(valid_until, :millisecond) @@ -30,7 +30,7 @@ defmodule MatrixServerWeb.Federation.KeyController do case KeyServer.sign_object(data) do {:ok, sig, key_id} -> - signed_data = MatrixServer.add_signature(data, key_id, sig) + signed_data = Architex.add_signature(data, key_id, sig) conn |> put_status(200) diff --git a/lib/matrix_server_web/federation/controllers/query_controller.ex b/lib/architex_web/federation/controllers/query_controller.ex similarity index 82% rename from lib/matrix_server_web/federation/controllers/query_controller.ex rename to lib/architex_web/federation/controllers/query_controller.ex index 60df951..4784e2d 100644 --- a/lib/matrix_server_web/federation/controllers/query_controller.ex +++ b/lib/architex_web/federation/controllers/query_controller.ex @@ -1,12 +1,12 @@ -defmodule MatrixServerWeb.Federation.QueryController do - use MatrixServerWeb, :controller - use MatrixServerWeb.Federation.AuthenticateServer +defmodule ArchitexWeb.Federation.QueryController do + use ArchitexWeb, :controller + use ArchitexWeb.Federation.AuthenticateServer - import MatrixServerWeb.Error + import ArchitexWeb.Error import Ecto.Query - alias MatrixServer.{Repo, Account} - alias MatrixServer.Types.UserId + alias Architex.{Repo, Account} + alias Architex.Types.UserId defmodule ProfileRequest do use Ecto.Schema @@ -40,7 +40,7 @@ defmodule MatrixServerWeb.Federation.QueryController do def profile(conn, params) do with {:ok, %ProfileRequest{user_id: %UserId{localpart: localpart, domain: domain}}} <- ProfileRequest.validate(params) do - if domain == MatrixServer.server_name() do + if domain == Architex.server_name() do case Repo.one(from a in Account, where: a.localpart == ^localpart) do %Account{} -> # TODO: Return displayname and avatar_url when we implement them. diff --git a/lib/matrix_server_web/federation/http_client.ex b/lib/architex_web/federation/http_client.ex similarity index 76% rename from lib/matrix_server_web/federation/http_client.ex rename to lib/architex_web/federation/http_client.ex index 4006665..46d6ccd 100644 --- a/lib/matrix_server_web/federation/http_client.ex +++ b/lib/architex_web/federation/http_client.ex @@ -1,15 +1,15 @@ -defmodule MatrixServerWeb.Federation.HTTPClient do +defmodule ArchitexWeb.Federation.HTTPClient do use Tesla - alias MatrixServerWeb.Endpoint - alias MatrixServerWeb.Federation.Request.GetSigningKeys - alias MatrixServerWeb.Federation.Middleware.SignRequest - alias MatrixServerWeb.Router.Helpers, as: RouteHelpers + alias ArchitexWeb.Endpoint + alias ArchitexWeb.Federation.Request.GetSigningKeys + alias ArchitexWeb.Federation.Middleware.SignRequest + alias ArchitexWeb.Router.Helpers, as: RouteHelpers # TODO: Maybe create database-backed homeserver struct to pass to client function. # TODO: Fix error propagation. - @adapter {Tesla.Adapter.Finch, name: MatrixServerWeb.HTTPClient} + @adapter {Tesla.Adapter.Finch, name: ArchitexWeb.HTTPClient} def client(server_name) do Tesla.client( @@ -29,17 +29,17 @@ defmodule MatrixServerWeb.Federation.HTTPClient do with {:ok, %GetSigningKeys{server_name: server_name, verify_keys: verify_keys, signatures: sigs} = response} <- tesla_request(:get, client, path, GetSigningKeys), - serializable_response <- MatrixServer.to_serializable_map(response), + serializable_response <- Architex.to_serializable_map(response), serializable_response <- Map.drop(serializable_response, [:signatures]), - {:ok, encoded_body} <- MatrixServer.encode_canonical_json(serializable_response), + {:ok, encoded_body} <- Architex.encode_canonical_json(serializable_response), server_sigs when not is_nil(server_sigs) <- sigs[server_name] do # For each verify key, check if there is a matching signature. # If not, invalidate the whole response. Enum.all?(verify_keys, fn {key_id, %{"key" => key}} -> with true <- Map.has_key?(server_sigs, key_id), - {:ok, decoded_key} <- MatrixServer.decode_base64(key), - {:ok, decoded_sig} <- MatrixServer.decode_base64(server_sigs[key_id]) do - MatrixServer.sign_verify(decoded_sig, encoded_body, decoded_key) + {:ok, decoded_key} <- Architex.decode_base64(key), + {:ok, decoded_sig} <- Architex.decode_base64(server_sigs[key_id]) do + Architex.sign_verify(decoded_sig, encoded_body, decoded_key) else _ -> false end diff --git a/lib/matrix_server_web/federation/request/get_signing_keys.ex b/lib/architex_web/federation/request/get_signing_keys.ex similarity index 81% rename from lib/matrix_server_web/federation/request/get_signing_keys.ex rename to lib/architex_web/federation/request/get_signing_keys.ex index c96a944..0bd21a0 100644 --- a/lib/matrix_server_web/federation/request/get_signing_keys.ex +++ b/lib/architex_web/federation/request/get_signing_keys.ex @@ -1,4 +1,4 @@ -defmodule MatrixServerWeb.Federation.Request.GetSigningKeys do +defmodule ArchitexWeb.Federation.Request.GetSigningKeys do use Ecto.Schema import Ecto.Changeset @@ -17,12 +17,12 @@ defmodule MatrixServerWeb.Federation.Request.GetSigningKeys do %__MODULE__{} |> cast(params, [:server_name, :verify_keys, :old_verify_keys, :signatures, :valid_until_ts]) |> validate_required([:server_name, :verify_keys, :valid_until_ts]) - |> MatrixServer.validate_change_simple(:verify_keys, fn map -> + |> Architex.validate_change_simple(:verify_keys, fn map -> Enum.all?(map, fn {_, map} -> is_map_key(map, "key") end) end) - |> MatrixServer.validate_change_simple(:old_verify_keys, fn map -> + |> Architex.validate_change_simple(:old_verify_keys, fn map -> Enum.all?(map, fn {_, %{"key" => key, "expired_ts" => expired_ts}} when is_binary(key) and is_integer(expired_ts) -> diff --git a/lib/matrix_server_web/federation/sign_request_middleware.ex b/lib/architex_web/federation/sign_request_middleware.ex similarity index 85% rename from lib/matrix_server_web/federation/sign_request_middleware.ex rename to lib/architex_web/federation/sign_request_middleware.ex index 2875bcd..f6d57c1 100644 --- a/lib/matrix_server_web/federation/sign_request_middleware.ex +++ b/lib/architex_web/federation/sign_request_middleware.ex @@ -1,4 +1,4 @@ -defmodule MatrixServerWeb.Federation.Middleware.SignRequest do +defmodule ArchitexWeb.Federation.Middleware.SignRequest do @behaviour Tesla.Middleware def call(%Tesla.Env{opts: opts} = env, next, _opts) do @@ -13,7 +13,7 @@ defmodule MatrixServerWeb.Federation.Middleware.SignRequest do defp sign_request(env, false), do: env defp sign_request(%Tesla.Env{method: method, url: path, opts: opts, body: body} = env, true) do - origin = MatrixServer.server_name() + origin = Architex.server_name() object_to_sign = %{ method: Atom.to_string(method) |> String.upcase(), @@ -25,7 +25,7 @@ defmodule MatrixServerWeb.Federation.Middleware.SignRequest do object_to_sign = if not is_nil(body), do: Map.put(object_to_sign, :content, body), else: object_to_sign - with {:ok, sig, key_id} <- MatrixServer.KeyServer.sign_object(object_to_sign) do + with {:ok, sig, key_id} <- Architex.KeyServer.sign_object(object_to_sign) do sigs = %{origin => %{key_id => sig}} auth_headers = create_signature_authorization_headers(sigs, origin) diff --git a/lib/matrix_server_web/federation/transaction.ex b/lib/architex_web/federation/transaction.ex similarity index 73% rename from lib/matrix_server_web/federation/transaction.ex rename to lib/architex_web/federation/transaction.ex index a64ab4c..1826479 100644 --- a/lib/matrix_server_web/federation/transaction.ex +++ b/lib/architex_web/federation/transaction.ex @@ -1,6 +1,6 @@ -defmodule MatrixServerWeb.Federation.Transaction do - alias MatrixServer.Event - alias MatrixServerWeb.Federation.Transaction +defmodule ArchitexWeb.Federation.Transaction do + alias Architex.Event + alias ArchitexWeb.Federation.Transaction # TODO @type edu :: any() @@ -27,9 +27,9 @@ defmodule MatrixServerWeb.Federation.Transaction do @spec new([Event.t()], [edu()] | nil) :: t() def new(pdu_events, edus \\ nil) do %Transaction{ - origin: MatrixServer.server_name(), + origin: Architex.server_name(), origin_server_ts: System.os_time(:millisecond), - pdus: Enum.map(pdu_events, &MatrixServer.to_serializable_map/1), + pdus: Enum.map(pdu_events, &Architex.to_serializable_map/1), edus: edus } end diff --git a/lib/matrix_server_web/request.ex b/lib/architex_web/request.ex similarity index 85% rename from lib/matrix_server_web/request.ex rename to lib/architex_web/request.ex index bf8a38e..5283faf 100644 --- a/lib/matrix_server_web/request.ex +++ b/lib/architex_web/request.ex @@ -1,4 +1,4 @@ -defmodule MatrixServerWeb.Request do +defmodule ArchitexWeb.Request do import Ecto.Changeset alias Ecto.Changeset @@ -19,7 +19,7 @@ defmodule MatrixServerWeb.Request do @spec parse(map()) :: {:ok, struct()} | {:error, Changeset.t()} def parse(params) do - MatrixServerWeb.Request.parse(__MODULE__, params) + ArchitexWeb.Request.parse(__MODULE__, params) end end end diff --git a/lib/matrix_server_web/router.ex b/lib/architex_web/router.ex similarity index 85% rename from lib/matrix_server_web/router.ex rename to lib/architex_web/router.ex index 7d37853..930fd85 100644 --- a/lib/matrix_server_web/router.ex +++ b/lib/architex_web/router.ex @@ -1,7 +1,7 @@ -defmodule MatrixServerWeb.Router do - use MatrixServerWeb, :router +defmodule ArchitexWeb.Router do + use ArchitexWeb, :router - alias MatrixServerWeb.Client.Plug.AuthenticateClient + alias ArchitexWeb.Client.Plug.AuthenticateClient # TODO: might be able to handle malformed JSON with custom body reader: # https://elixirforum.com/t/write-malformed-json-in-the-body-plug/30578/13 @@ -22,7 +22,7 @@ defmodule MatrixServerWeb.Router do end # Public client endpoint. - scope "/_matrix/client", MatrixServerWeb.Client do + scope "/_matrix/client", ArchitexWeb.Client do pipe_through :public scope "/r0" do @@ -37,14 +37,14 @@ defmodule MatrixServerWeb.Router do end # Public federation endpoint. - scope "/_matrix", MatrixServerWeb.Federation do + scope "/_matrix", ArchitexWeb.Federation do scope "/key/v2" do get "/server", KeyController, :get_signing_keys end end # Authenticated client endpoint. - scope "/_matrix/client", MatrixServerWeb.Client do + scope "/_matrix/client", ArchitexWeb.Client do pipe_through :authenticate_client scope "/r0" do @@ -72,7 +72,7 @@ defmodule MatrixServerWeb.Router do end # Authenticated federation endpoint. - scope "/_matrix/federation", MatrixServerWeb.Federation do + scope "/_matrix/federation", ArchitexWeb.Federation do pipe_through :authenticate_server scope "/v1" do @@ -83,7 +83,7 @@ defmodule MatrixServerWeb.Router do end end - scope "/", MatrixServerWeb.Client do + scope "/", ArchitexWeb.Client do match :*, "/*path", InfoController, :unrecognized end end diff --git a/lib/matrix_server_web/telemetry.ex b/lib/architex_web/telemetry.ex similarity index 72% rename from lib/matrix_server_web/telemetry.ex rename to lib/architex_web/telemetry.ex index 4526322..aa102f4 100644 --- a/lib/matrix_server_web/telemetry.ex +++ b/lib/architex_web/telemetry.ex @@ -1,4 +1,4 @@ -defmodule MatrixServerWeb.Telemetry do +defmodule ArchitexWeb.Telemetry do use Supervisor import Telemetry.Metrics @@ -31,11 +31,11 @@ defmodule MatrixServerWeb.Telemetry do ), # Database Metrics - summary("matrix_server.repo.query.total_time", unit: {:native, :millisecond}), - summary("matrix_server.repo.query.decode_time", unit: {:native, :millisecond}), - summary("matrix_server.repo.query.query_time", unit: {:native, :millisecond}), - summary("matrix_server.repo.query.queue_time", unit: {:native, :millisecond}), - summary("matrix_server.repo.query.idle_time", unit: {:native, :millisecond}), + summary("architex.repo.query.total_time", unit: {:native, :millisecond}), + summary("architex.repo.query.decode_time", unit: {:native, :millisecond}), + summary("architex.repo.query.query_time", unit: {:native, :millisecond}), + summary("architex.repo.query.queue_time", unit: {:native, :millisecond}), + summary("architex.repo.query.idle_time", unit: {:native, :millisecond}), # VM Metrics summary("vm.memory.total", unit: {:byte, :kilobyte}), @@ -49,7 +49,7 @@ defmodule MatrixServerWeb.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. - # {MatrixServerWeb, :count_users, []} + # {ArchitexWeb, :count_users, []} ] end end diff --git a/lib/matrix_server/application.ex b/lib/matrix_server/application.ex deleted file mode 100644 index a1afe0e..0000000 --- a/lib/matrix_server/application.ex +++ /dev/null @@ -1,29 +0,0 @@ -defmodule MatrixServer.Application do - # See https://hexdocs.pm/elixir/Application.html - # for more information on OTP Applications - @moduledoc false - - use Application - - def start(_type, _args) do - children = [ - MatrixServer.Repo, - MatrixServerWeb.Telemetry, - {Phoenix.PubSub, name: MatrixServer.PubSub}, - MatrixServerWeb.Endpoint, - {Registry, keys: :unique, name: MatrixServer.RoomServer.Registry}, - {DynamicSupervisor, name: MatrixServer.RoomServer.Supervisor, strategy: :one_for_one}, - MatrixServer.KeyServer, - {Finch, name: MatrixServerWeb.HTTPClient} - ] - - Supervisor.start_link(children, name: MatrixServer.Supervisor, strategy: :one_for_one) - end - - # Tell Phoenix to update the endpoint configuration - # whenever the application is updated. - def config_change(changed, _new, removed) do - MatrixServerWeb.Endpoint.config_change(changed, removed) - :ok - end -end diff --git a/lib/matrix_server/repo.ex b/lib/matrix_server/repo.ex deleted file mode 100644 index 731fc2f..0000000 --- a/lib/matrix_server/repo.ex +++ /dev/null @@ -1,5 +0,0 @@ -defmodule MatrixServer.Repo do - use Ecto.Repo, - otp_app: :matrix_server, - adapter: Ecto.Adapters.Postgres -end diff --git a/mix.exs b/mix.exs index 7b7aad7..7e387e0 100644 --- a/mix.exs +++ b/mix.exs @@ -1,9 +1,9 @@ -defmodule MatrixServer.MixProject do +defmodule Architex.MixProject do use Mix.Project def project do [ - app: :matrix_server, + app: :architex, version: "0.1.0", elixir: "~> 1.7", elixirc_paths: elixirc_paths(Mix.env()), @@ -23,7 +23,7 @@ defmodule MatrixServer.MixProject do # Type `mix help compile.app` for more information. def application do [ - mod: {MatrixServer.Application, []}, + mod: {Architex.Application, []}, extra_applications: [:logger, :runtime_tools] ] end diff --git a/priv/repo/migrations/20210830160818_create_initial_tables.exs b/priv/repo/migrations/20210830160818_create_initial_tables.exs index 9884e2c..4670b27 100644 --- a/priv/repo/migrations/20210830160818_create_initial_tables.exs +++ b/priv/repo/migrations/20210830160818_create_initial_tables.exs @@ -1,4 +1,4 @@ -defmodule MatrixServer.Repo.Migrations.CreateInitialTables do +defmodule Architex.Repo.Migrations.CreateInitialTables do use Ecto.Migration def change do diff --git a/priv/repo/seeds.exs b/priv/repo/seeds.exs index 527b63f..11e5706 100644 --- a/priv/repo/seeds.exs +++ b/priv/repo/seeds.exs @@ -1,4 +1,4 @@ -alias MatrixServer.{Repo, Account} +alias Architex.{Repo, Account} account = Repo.insert!(%Account{ diff --git a/psql.sh b/psql.sh index 689444d..a70a544 100755 --- a/psql.sh +++ b/psql.sh @@ -1,2 +1,2 @@ #!/bin/bash -sudo -u postgres psql -d matrix_server_dev +sudo -u postgres psql -d architex_dev diff --git a/test/controllers/info_controller_test.exs b/test/controllers/info_controller_test.exs index cf08c0b..273251a 100644 --- a/test/controllers/info_controller_test.exs +++ b/test/controllers/info_controller_test.exs @@ -1,5 +1,5 @@ -defmodule MatrixServerWeb.InfoControllerTest do - use MatrixServerWeb.ConnCase +defmodule ArchitexWeb.InfoControllerTest do + use ArchitexWeb.ConnCase test "versions endpoint returns a list of supported Matrix spec versions", %{conn: conn} do conn = get(conn, Routes.info_path(conn, :versions)) @@ -9,7 +9,7 @@ defmodule MatrixServerWeb.InfoControllerTest do end test "unrecognized route renders M_UNRECOGNIZED error", %{conn: conn} do - conn = get(conn, MatrixServerWeb.Endpoint.url() <> "/sneed") + conn = get(conn, ArchitexWeb.Endpoint.url() <> "/sneed") assert %{"errcode" => "M_UNRECOGNIZED"} = json_response(conn, 400) end diff --git a/test/controllers/login_controller_test.exs b/test/controllers/login_controller_test.exs index c8db075..4d2b1a7 100644 --- a/test/controllers/login_controller_test.exs +++ b/test/controllers/login_controller_test.exs @@ -1,8 +1,8 @@ -defmodule MatrixServerWeb.LoginControllerTest do - use MatrixServerWeb.ConnCase +defmodule ArchitexWeb.LoginControllerTest do + use ArchitexWeb.ConnCase - alias MatrixServer.Factory - alias MatrixServerWeb.Endpoint + alias Architex.Factory + alias ArchitexWeb.Endpoint @basic_params %{ "type" => "m.login.password", @@ -31,7 +31,7 @@ defmodule MatrixServerWeb.LoginControllerTest do recycle(conn) |> post_json(Routes.login_path(Endpoint, :login), %{ @basic_params - | "identifier" => %{"type" => "m.id.user", "user" => MatrixServer.get_mxid("sneed")} + | "identifier" => %{"type" => "m.id.user", "user" => Architex.get_mxid("sneed")} }) assert %{"user_id" => _, "access_token" => _, "device_id" => _} = json_response(conn, 200) diff --git a/test/controllers/register_controller_test.exs b/test/controllers/register_controller_test.exs index 01c8bf2..efb0779 100644 --- a/test/controllers/register_controller_test.exs +++ b/test/controllers/register_controller_test.exs @@ -1,10 +1,10 @@ -defmodule MatrixServerWeb.RegisterControllerTest do - use MatrixServerWeb.ConnCase +defmodule ArchitexWeb.RegisterControllerTest do + use ArchitexWeb.ConnCase import Ecto.Query - alias MatrixServer.{Repo, Device, Factory} - alias MatrixServerWeb.Endpoint + alias Architex.{Repo, Device, Factory} + alias ArchitexWeb.Endpoint @basic_params %{ "username" => "user", @@ -22,7 +22,7 @@ defmodule MatrixServerWeb.RegisterControllerTest do test "registers account with minimal information", %{conn: conn} do conn = post_json(conn, Routes.register_path(Endpoint, :register), @basic_params) - user_id = MatrixServer.get_mxid("user") + user_id = Architex.get_mxid("user") assert %{"access_token" => _, "device_id" => _, "user_id" => ^user_id} = json_response(conn, 200) diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex index b989cdc..96d4ad3 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -1,4 +1,4 @@ -defmodule MatrixServerWeb.ConnCase do +defmodule ArchitexWeb.ConnCase do @moduledoc """ This module defines the test case to be used by tests that require setting up a connection. @@ -11,7 +11,7 @@ defmodule MatrixServerWeb.ConnCase do we enable the SQL sandbox, so changes done to the database are reverted at the end of every test. If you are using PostgreSQL, you can even run database tests asynchronously - by setting `use MatrixServerWeb.ConnCase, async: true`, although + by setting `use ArchitexWeb.ConnCase, async: true`, although this option is not recommended for other databases. """ @@ -22,20 +22,20 @@ defmodule MatrixServerWeb.ConnCase do # Import conveniences for testing with connections import Plug.Conn import Phoenix.ConnTest - import MatrixServerWeb.ConnCase + import ArchitexWeb.ConnCase - alias MatrixServerWeb.Router.Helpers, as: Routes + alias ArchitexWeb.Router.Helpers, as: Routes # The default endpoint for testing - @endpoint MatrixServerWeb.Endpoint + @endpoint ArchitexWeb.Endpoint end end setup tags do - :ok = Ecto.Adapters.SQL.Sandbox.checkout(MatrixServer.Repo) + :ok = Ecto.Adapters.SQL.Sandbox.checkout(Architex.Repo) unless tags[:async] do - Ecto.Adapters.SQL.Sandbox.mode(MatrixServer.Repo, {:shared, self()}) + Ecto.Adapters.SQL.Sandbox.mode(Architex.Repo, {:shared, self()}) end {:ok, conn: Phoenix.ConnTest.build_conn()} diff --git a/test/support/data_case.ex b/test/support/data_case.ex index dd971e8..f45bc25 100644 --- a/test/support/data_case.ex +++ b/test/support/data_case.ex @@ -1,4 +1,4 @@ -defmodule MatrixServer.DataCase do +defmodule Architex.DataCase do @moduledoc """ This module defines the setup for tests requiring access to the application's data layer. @@ -10,7 +10,7 @@ defmodule MatrixServer.DataCase do we enable the SQL sandbox, so changes done to the database are reverted at the end of every test. If you are using PostgreSQL, you can even run database tests asynchronously - by setting `use MatrixServer.DataCase, async: true`, although + by setting `use Architex.DataCase, async: true`, although this option is not recommended for other databases. """ @@ -18,20 +18,20 @@ defmodule MatrixServer.DataCase do using do quote do - alias MatrixServer.Repo + alias Architex.Repo import Ecto import Ecto.Changeset import Ecto.Query - import MatrixServer.DataCase + import Architex.DataCase end end setup tags do - :ok = Ecto.Adapters.SQL.Sandbox.checkout(MatrixServer.Repo) + :ok = Ecto.Adapters.SQL.Sandbox.checkout(Architex.Repo) unless tags[:async] do - Ecto.Adapters.SQL.Sandbox.mode(MatrixServer.Repo, {:shared, self()}) + Ecto.Adapters.SQL.Sandbox.mode(Architex.Repo, {:shared, self()}) end :ok diff --git a/test/support/factory.ex b/test/support/factory.ex index 7c5e0d1..23e8cdf 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -1,7 +1,7 @@ -defmodule MatrixServer.Factory do - use ExMachina.Ecto, repo: MatrixServer.Repo +defmodule Architex.Factory do + use ExMachina.Ecto, repo: Architex.Repo - alias MatrixServer.{Account, Device} + alias Architex.{Account, Device} def account_factory do %Account{ diff --git a/test/test_helper.exs b/test/test_helper.exs index 3f16763..3bb6cc6 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -1,2 +1,2 @@ ExUnit.start() -Ecto.Adapters.SQL.Sandbox.mode(MatrixServer.Repo, :manual) +Ecto.Adapters.SQL.Sandbox.mode(Architex.Repo, :manual)