Skip to content

Commit

Permalink
Merge pull request CaliDog#56 from CaliDog/ryan/1.6.0
Browse files Browse the repository at this point in the history
Greatly simplify the serialization process and remove chain from the main stream
  • Loading branch information
Fitblip authored Dec 5, 2020
2 parents bed4fe2 + f586abf commit 26dff90
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 71 deletions.
96 changes: 26 additions & 70 deletions lib/certstream/client_manager_agent.ex
Original file line number Diff line number Diff line change
Expand Up @@ -66,62 +66,24 @@ defmodule Certstream.ClientManager do
Logger.debug(fn -> "Broadcasting #{length(entries)} certificates to clients" end)

certificates = entries
|> Enum.map(&(%{:message_type => "certificate_update", :data => &1}))

Certstream.CertifcateBuffer.add_certs_to_buffer(certificates |> Enum.map(&remove_der_from_certs/1))

serialized_certificates_full = certificates |> Enum.reduce([], fn (cert, acc) ->
try do
[Jason.encode!(cert) | acc]
rescue
e in _ ->
Logger.error(
"""
Parsing cert failed - #{inspect e}
#{inspect cert[:data][:cert_link]}
#{inspect cert[:data][:leaf_cert][:as_der]}
"""
)
acc
end
end)
|> Enum.map(&(%{:message_type => "certificate_update", :data => &1}))

serialized_certificates_lite = certificates |> Enum.reduce([], fn (cert, acc) ->
try do
encoded_cert = cert
|> remove_der_from_certs
|> Jason.encode!(cert)
[encoded_cert | acc]
rescue
e in _ ->
Logger.error(
"""
Parsing cert failed - #{inspect e}
#{inspect cert[:data][:cert_link]}
#{inspect cert[:data][:leaf_cert][:as_der]}
"""
)
acc
end
end)
serialized_certificates_full = certificates
|> Enum.map(&Jason.encode!/1)

dns_entries_only = certificates |> Enum.reduce([], fn (cert, acc) ->
try do
encoded_cert = %{:message_type => "dns_entries", :data => cert.data.leaf_cert.all_domains}
|> Jason.encode!(cert)
[encoded_cert | acc]
rescue
e in _ ->
Logger.error(
"""
Parsing cert failed - #{inspect e}
#{inspect cert[:data][:cert_link]}
#{inspect cert[:data][:leaf_cert][:as_der]}
"""
)
acc
end
end)
certificates_lite = certificates
|> Enum.map(&remove_chain_from_cert/1)
|> Enum.map(&remove_der_from_cert/1)

Certstream.CertifcateBuffer.add_certs_to_buffer(certificates_lite)

serialized_certificates_lite = certificates_lite
|> Enum.map(&Jason.encode!/1)

dns_entries_only = certificates
|> Enum.map(&get_in(&1, [:data, :leaf_cert, :all_domains]))
|> Enum.map(fn dns_entries -> %{:message_type => "dns_entries", :data => dns_entries} end)
|> Enum.map(&Jason.encode!/1)

get_clients()
|> Enum.each(fn {_, client_state} ->
Expand All @@ -139,22 +101,16 @@ defmodule Certstream.ClientManager do
:pobox.post(po_box, entries)
end

def remove_der_from_certs(certs) do
# Clean the der field from the leaf cert
certs = certs
|> pop_in([:data, :leaf_cert, :as_der])
|> elem(1)

# Clean the der fields from the chain as well
certs
|> put_in(
[:data, :chain],
certs[:data][:chain]
|> Enum.map(fn chain_cert ->
chain_cert
|> Map.delete(:as_der)
end)
)
def remove_chain_from_cert(cert) do
cert
|> pop_in([:data, :chain])
|> elem(1)
end

def remove_der_from_cert(cert) do
# Clean the der field from the leaf cert
cert
|> pop_in([:data, :leaf_cert, :as_der])
|> elem(1)
end
end
2 changes: 1 addition & 1 deletion mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ defmodule Certstream.Mixfile do
def project do
[
app: :certstream,
version: "1.5.0",
version: "1.6.0",
elixir: "~> 1.6",
start_permanent: Mix.env == :prod,
deps: deps(),
Expand Down

0 comments on commit 26dff90

Please sign in to comment.