<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="248584" data-post-id="248584">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="type1fool" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/type1fool/120/26216_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  type1fool
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’m keeping my dependencies as minimal as possible. If the double encode/decode solution turns out to be brittle, I will likely use <code>base64-js</code>. The <a href="https://socket.dev/npm/package/base64-js/overview/1.5.1" rel="noopener nofollow ugc">Socket report</a> looks acceptable, and the package is actually maintained by Feross, one of the creators of Socket.dev. <img src="https://forum.elixirforum.com/images/emoji/apple/smiling_face_with_sunglasses.png?v=15" title=":smiling_face_with_sunglasses:" class="emoji" alt=":smiling_face_with_sunglasses:" loading="lazy" width="20" height="20"> Thanks for the suggestion!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="248584" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/implementing-webauthn-via-liveview/47131/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-248584" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="248584"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="248731" data-post-id="248731">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="type1fool" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/type1fool/120/26216_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  type1fool
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/tangui" rel="nofollow">@tangui</a> The Wax demo is using <a href="https://github.com/tanguilp/wax_demo/blob/master/lib/wax_demo/user.ex" rel="noopener nofollow ugc">DETS for storage</a>, but I’m using Postgres. <code>Jason</code> fails to encode the cose key for storage due to invalid bytes. Is there a way to encode they key for DB storage?</p>
<p><strong>Error</strong></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">[error] GenServer #PID&lt;0.695.0&gt; terminating
** (Jason.EncodeError) invalid byte 0x98 in &lt;&lt;152, 56, 87, 90, 219, 182, 209, 197, 234, 133, 243, 172, 126, 118, 138, 103, 80, ..., 166, 6, 236, 39, 106, 29, 54&gt;&gt;
</code></pre>
<p><strong>Example Cose Key</strong></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">%{
  -3 =&gt; &lt;&lt;182, 81, 183, 218, 92, 107, 106, 120, 60, 51, 75, 104, 141, 130,
    119, 232, 34, 245, 84, 203, 246, 165, 148, 179, 169, 31, 205, 126, 241,
    188, 241, 176&gt;&gt;,
  -2 =&gt; &lt;&lt;89, 29, 193, 225, 4, 234, 101, 162, 32, 6, 15, 14, 130, 179, 223,
    207, 53, 2, 134, 184, 178, 127, 51, 145, 57, 180, 104, 242, 138, 96, 27,
    221&gt;&gt;,
  -1 =&gt; 1,
  1 =&gt; 2,
  3 =&gt; -7
}

</code></pre>
<p><a href="https://hexdocs.pm/wax_/readme.html#registration" rel="noopener nofollow ugc">Wax Registration doc</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="248731" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/implementing-webauthn-via-liveview/47131/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-248731" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="248731"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="248735" data-post-id="248735">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tomciopp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tomciopp/120/4900_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tomciopp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p><a class="mention" href="/u/type1fool" rel="nofollow">@type1fool</a> I’ve also written a webauthn library, and am the creator of the cbor library as well. <a href="https://github.com/scalpel-software/webauthn" class="inline-onebox" rel="noopener nofollow ugc">GitHub - scalpel-software/webauthn: Authenticate users to your web application using public key cryptography by becoming a webauthn relying party · GitHub</a> (I will be writing more documentation soon)</p>
<p>For saving the cose key you can create a custom ecto type and save it as a binary.</p>
<p>something like</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule Ecto.CoseKey do
  use Ecto.Type

  def type, do: :binary

  def cast(value) when is_map(value) do
    try do
      {:ok, CBOR.encode(value)}
    rescue
      Protocol.UndefinedError -&gt; :error
    end
  end

  def cast(_), do: :error

  def load(data) when is_binary(data) do
    case CBOR.decode(data) do
      {:ok, cose_key, ""} -&gt; {:ok, cose_key}
      _other -&gt; :error
    end
  end

  def dump(value), do: {:ok, value}
end
</code></pre>
<p>Let me know if you have any additional questions.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="248735" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/implementing-webauthn-via-liveview/47131/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-248735" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="248735"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="248743" data-post-id="248743">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tangui" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tangui/120/12091_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tangui
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>You can store it as a string:</p>
<p><code>key |&gt; term_to_binary() |&gt; Base.encode64()</code></p>
<p>and back from the DB:</p>
<p><code>key_from_db |&gt; Base.decode64() |&gt; binary_to_term()</code></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="248743" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/implementing-webauthn-via-liveview/47131/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-248743" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="248743"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="248839" data-post-id="248839">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="type1fool" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/type1fool/120/26216_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  type1fool
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hey <a class="mention" href="/u/tomciopp" rel="nofollow">@tomciopp</a> ! I saw the <code>webauthn</code> package when I was getting started, but the alpha status and docs made it hard to choose it fwiw. Regardless, I see that <code>cbor</code> is a dependency for Wax, so I owe you and <a class="mention" href="/u/tangui" rel="nofollow">@tangui</a> a drink. <img src="https://forum.elixirforum.com/images/emoji/apple/beers.png?v=15" title=":beers:" class="emoji" alt=":beers:" loading="lazy" width="20" height="20"></p>
<p>Thank you for the custom Ecto type suggestion. It works, and it’s idiomatic. Nice! Now I need to use <code>Ecto.Type</code> to clean up some unrelated work. <img src="https://forum.elixirforum.com/images/emoji/apple/smiley_cat.png?v=15" title=":smiley_cat:" class="emoji" alt=":smiley_cat:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="248839" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/implementing-webauthn-via-liveview/47131/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-248839" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="248839"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="248840" data-post-id="248840">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="type1fool" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/type1fool/120/26216_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  type1fool
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>On another note, after a bit of refactoring, I removed the double encoding/decoding steps after finding issues with my <code>Uint8Array</code> JS implementation. I still get errors on occasion, but they’re much less frequent. I suspect the JS needs just a <em>little</em> more TLC.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="248840" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/implementing-webauthn-via-liveview/47131/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-248840" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="248840"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="249632" data-post-id="249632">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="type1fool" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/type1fool/120/26216_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  type1fool
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h2><a name="p-249632-update-1" class="anchor" href="#p-249632-update-1" aria-label="Heading link" rel="nofollow"></a>Update</h2>
<p>I’ve made significant progress on this over the past weeks. In Chrome (<em>and Safari - see next reply</em>), I can register and login using TouchID or a USB key via WebAuthn. <img src="https://forum.elixirforum.com/images/emoji/apple/tada.png?v=15" title=":tada:" class="emoji" alt=":tada:" loading="lazy" width="20" height="20"> To share what I’ve been learning, I started <a href="https://www.twitch.tv/owenbickford/videos" rel="noopener nofollow ugc">live streaming via Twitch</a>.</p>
<p>Today, I encountered an error when I attempted to register in Safari. The attestation statement is coming back with an invalid format. <code>pubKeyCredParams</code> is configured as recommended by <a href="https://webauthn.guide/" rel="noopener nofollow ugc">webauthn.guide</a> and <a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API" rel="noopener nofollow ugc">MDN docs</a>, so I don’t understand why Safari/WebKit is returning a different format. Has anyone else seen this?</p>
<p><strong>Safari: Invalid attStmt</strong></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">attestation_decoded: {:ok,
 %{
   "attStmt" =&gt; %{
     "x5c" =&gt; [
       %CBOR.Tag{
         tag: :bytes,
         value: &lt;&lt;48, 130, 2, 66, 48, 130, 1, 201, 160, 3, 2, 1, 2, 2, 6, 1,
           128, 124, 231, 151, 17, 48, 10, 6, 8, 42, 134, 72, 206, 61, 4, 3, 2,
           48, 72, 49, 28, 48, 26, 6, 3, 85, 4, ...&gt;&gt;
       },
       %CBOR.Tag{
         tag: :bytes,
         value: &lt;&lt;48, 130, 2, 52, 48, 130, 1, 186, 160, 3, 2, 1, 2, 2, 16, 86,
           37, 83, 149, 199, 167, 251, 64, 235, 226, 40, 216, 38, 8, 83, 182,
           48, 10, 6, 8, 42, 134, 72, 206, 61, 4, 3, ...&gt;&gt;
       }
     ]
   },
   "authData" =&gt; %CBOR.Tag{
     tag: :bytes,
     value: &lt;&lt;73, 150, 13, 229, 136, 14, 140, 104, 116, 52, 23, 15, 100, 118,
       96, 91, 143, 228, 174, 185, 162, 134, 50, 199, 153, 92, 243, 186, 131,
       29, 151, 99, 69, 0, 0, 0, 0, 242, 74, 142, 112, 208, 211, 248, ...&gt;&gt;
   },
   "fmt" =&gt; "apple"
 }, ""}
</code></pre>
<p><strong>Chrome: Valid attStmt</strong></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">attestation_decoded: {:ok,
%{
  "attStmt" =&gt; %{
    "alg" =&gt; -7,
    "sig" =&gt; %CBOR.Tag{
      tag: :bytes,
      value: &lt;&lt;48, 69, 2, 32, 47, 29, 113, 135, 145, 72, 34, 17, 253, 171, 217,
        197, 203, 183, 23, 136, 9, 11, 218, 71, 128, 245, 55, 104, 177, 220,
        10, 73, 42, 207, 157, 7, 2, 33, 0, 158, 243, 192, 200, ...&gt;&gt;
    }
  },
  "authData" =&gt; %CBOR.Tag{
    tag: :bytes,
    value: &lt;&lt;73, 150, 13, 229, 136, 14, 140, 104, 116, 52, 23, 15, 100, 118,
      96, 91, 143, 228, 174, 185, 162, 134, 50, 199, 153, 92, 243, 186, 131,
      29, 151, 99, 69, 98, 109, 204, 235, 173, 206, 0, 2, 53, 188, 198, ...&gt;&gt;
  },
  "fmt" =&gt; "packed"
}, ""}
</code></pre>
<p><strong>Public Key Config</strong></p>
<pre data-code-wrap="javascript"><code class="lang-javascript">const publicKey = {
  challenge: challenge.buffer,
  rp: {
    name: appName,
    id: rp_id,
  },
  user: {
    id: new Uint8Array(16).buffer,
    name: user.email,
    displayName: user.username,
  },
  pubKeyCredParams: [{ alg: -7, type: "public-key" }],
  timeout: 60000,
  attestation: attestation,
  authenticatorSelection: {
    userVerification: user_verification,
  },
};
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="249632" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/implementing-webauthn-via-liveview/47131/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-249632" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="249632"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="249636" data-post-id="249636">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="type1fool" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/type1fool/120/26216_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  type1fool
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Ok, I poked around <a href="http://webauthn.io" rel="noopener nofollow ugc">webauthn.io</a> and found that it would only work in Safari if attestation was set to <code>none</code>. Problem solved I suppose, though I’m reading further on implications of this change.</p>
<p>Testing on my iPhone with Safari 15.4, somehow, <code>navigator.credentials</code> doesn’t exist. I’m baffled since <a href="http://webauth.io" rel="noopener nofollow ugc">webauth.io</a> can register, and I see the call to <code>navigator.credentials.create</code> in the source JS. I do have Web Authentication API &amp; Web Authentication Modern enabled in advanced settings, and it seems to have been supported since v13 (<a href="https://caniuse.com/?search=credentials" rel="noopener nofollow ugc">caniuse</a>). This is weird.</p>
<p>Edit: <strong>Eureka!</strong><br>
It turns out Safari only allows <code>navigator.credentials</code> on https with no exception for <code>localhost</code>. Running my site over ngrok https, WebAuthn works! <img src="https://forum.elixirforum.com/images/emoji/apple/beers.png?v=15" title=":beers:" class="emoji" alt=":beers:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="249636" data-batch-url="/posts/batch_likers">
                        7
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/implementing-webauthn-via-liveview/47131/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-249636" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="249636"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="254615" data-post-id="254615">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dch" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dch/120/2682_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dch
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>just found your video on this, thanks for sharing! Is the source code for the module around anywhere?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="254615" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/implementing-webauthn-via-liveview/47131/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-254615" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="254615"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="254630" data-post-id="254630">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="type1fool" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/type1fool/120/26216_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  type1fool
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>It’s not publicly available yet, but I intend to extract it from the app and release a package.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="254630" data-batch-url="/posts/batch_likers">
                        3
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/implementing-webauthn-via-liveview/47131/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-254630" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="254630"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/47131/load_more?page=3">Load more posts (5 remaining)</a>
</div></template></turbo-stream>