Current section

Files

Jump to
piazza_core lib crypto license.ex
Raw

lib/crypto/license.ex

defmodule Piazza.Crypto.License do
use GenServer
alias Piazza.Crypto.RSA
defmodule State, do: defstruct [:license, :on_failure, :on_verify, :public_key]
@interval 60 * 1000
def start_link(license, public_key, on_failure, on_verify \\ fn _ -> :ok end)
when is_function(on_failure) and is_function(on_verify) do
GenServer.start_link(__MODULE__, [license, public_key, on_failure, on_verify], name: __MODULE__)
end
def init([license, public_key, on_failure, on_verify]) do
:timer.send_interval(@interval, :verify)
send self(), :verify
{:ok, %State{license: license, public_key: public_key, on_failure: on_failure, on_verify: on_verify}}
end
def handle_info(
:verify,
%State{license: license, on_failure: on_failure, on_verify: on_verify, public_key: pub} = state
) do
case RSA.decrypt(license, pub) do
{:ok, _} = res ->
on_verify.(res)
{:noreply, state}
error ->
on_failure.(error)
{:noreply, state}
end
end
end