Add dialyzer dependency

Add typespecs to several functions
This commit is contained in:
Pim Kunis 2021-08-18 23:22:04 +02:00
parent 7b011123f8
commit 58d3e17259
12 changed files with 79 additions and 44 deletions

View file

@ -10,10 +10,12 @@ defmodule MatrixServer.KeyServer do
GenServer.start_link(__MODULE__, opts, name: __MODULE__)
end
@spec sign_object(map()) :: {:ok, String.t(), String.t()} | :error
def sign_object(object) do
GenServer.call(__MODULE__, {:sign_object, object})
end
@spec get_own_signing_keys() :: list({String.t(), binary()})
def get_own_signing_keys() do
GenServer.call(__MODULE__, :get_own_signing_keys)
end
@ -41,6 +43,7 @@ defmodule MatrixServer.KeyServer do
end
# https://blog.swwomm.com/2020/09/elixir-ed25519-signatures-with-enacl.html
@spec sign_object(map(), binary()) :: {:ok, String.t()} | {:error, Jason.EncodeError.t()}
defp sign_object(object, private_key) do
object = Map.drop(object, [:signatures, :unsigned])
@ -55,7 +58,8 @@ defmodule MatrixServer.KeyServer do
end
# TODO: not sure if there is a better way to do this...
def read_keys do
@spec read_keys() :: {binary(), binary()}
defp read_keys do
raw_priv_key =
Application.get_env(:matrix_server, :private_key_file)
|> File.read!()

View file

@ -1,14 +0,0 @@
defmodule MatrixServer.QuickCheck do
import Ecto.Query
alias MatrixServer.{Repo, Room, Account, RoomServer}
alias MatrixServerWeb.Client.Request.CreateRoom
def create_room(name \\ nil, topic \\ nil) do
account = Repo.one!(from a in Account, limit: 1)
input = %CreateRoom{name: name, topic: topic}
%Room{id: room_id} = Repo.insert!(Room.create_changeset(input))
{:ok, pid} = RoomServer.get_room_server(room_id)
RoomServer.create_room(pid, account, input)
end
end

View file

@ -20,6 +20,7 @@ defmodule MatrixServer.RoomServer do
# Get room server pid, or spin one up for the room.
# If the room does not exist, return an error.
@spec get_room_server(String.t()) :: {:error, :not_found} | DynamicSupervisor.on_start_child()
def get_room_server(room_id) do
case Repo.one(from r in Room, where: r.id == ^room_id) do
nil ->
@ -42,10 +43,12 @@ defmodule MatrixServer.RoomServer do
end
end
@spec create_room(pid(), MatrixServer.Account.t(), MatrixServerWeb.Client.Request.CreateRoom.t()) :: {:ok, String.t()} | {:error, atom()}
def create_room(pid, account, input) do
GenServer.call(pid, {:create_room, account, input})
end
@spec server_in_room(pid(), String.t()) :: boolean()
def server_in_room(pid, domain) do
GenServer.call(pid, {:server_in_room, domain})
end

View file

@ -7,6 +7,10 @@ defmodule MatrixServer.Account do
alias MatrixServerWeb.Client.Request.{Register, Login}
alias Ecto.Multi
@type t :: %__MODULE__{
password_hash: String.t()
}
@max_mxid_length 255
@primary_key {:localpart, :string, []}

View file

@ -7,6 +7,12 @@ defmodule MatrixServer.Room do
alias MatrixServer.{Repo, Room, Event, Alias, RoomServer}
alias MatrixServerWeb.Client.Request.CreateRoom
@type t :: %__MODULE__{
visibility: :public | :private,
state: list(list(String.t())),
forward_extremities: list(String.t())
}
@primary_key {:id, :string, []}
schema "rooms" do
field :visibility, Ecto.Enum, values: [:public, :private]

View file

@ -129,8 +129,10 @@ defmodule MatrixServer.StateResolution.Authorization do
end
defp _authorized?(%Event{type: "m.room.third_party_invite", sender: sender}, state_set) do
power_levels = get_power_levels(state_set)
# Check rule: 7.1
has_power_level(sender, state_set, :invite)
has_power_level(sender, power_levels, :invite)
end
defp _authorized?(%Event{state_key: state_key, sender: sender} = event, state_set) do
@ -202,8 +204,10 @@ defmodule MatrixServer.StateResolution.Authorization do
defp get_action_power_level(:invite, _), do: 50
defp get_action_power_level(:ban, %{"ban" => pl}), do: pl
defp get_action_power_level(:ban, _), do: 50
defp get_action_power_level(:redact, %{"redact" => pl}), do: pl
defp get_action_power_level(:redact, _), do: 50
# defp get_action_power_level(:redact, %{"redact" => pl}), do: pl
# defp get_action_power_level(:redact, _), do: 50
# defp get_action_power_level(:kick, %{"kick" => pl}), do: pl
# defp get_action_power_level(:kick, _), do: 50
defp get_action_power_level({:event, %Event{type: type}}, %{"events" => events})
when is_map_key(events, type),