floof-webchat/lib/chat/floof.ex
2022-11-26 23:54:11 +01:00

33 lines
973 B
Elixir

defmodule Chat.Floof do
use Agent
require Logger
defstruct secret: ""
def start_link([]) do
Agent.start_link(fn ->
secret_file = Application.fetch_env!(:chat, :secret_file)
{:ok, secret} = File.read(secret_file)
%Chat.Floof{secret: secret}
end, name: __MODULE__)
end
def setup do
# generate and save a keypair
kp = :enacl.sign_keypair()
secret_file = Application.fetch_env!(:chat, :secret_file)
:ok = File.write(secret_file, kp.secret)
end
def send_message(name, data) do
msg_topic = [{:RelativeDistinguishedName, {0, 9, 2342, 19200300, 100, 1, 14}, "Chat"}]
msg_attrs = [{:RelativeDistinguishedName, {0, 9, 2342, 19200300, 100, 1, 4}, name}]
msg_inner = Floof.Message.pack_inner(msg_topic, msg_attrs, :info, data)
Agent.cast(__MODULE__, fn state ->
msg_outer = Floof.Message.build_outer(255, [], state.secret, msg_inner)
Floof.Message.emit(msg_outer)
state
end)
end
end