+ //- p.center
+ a.center(href="/reset-password") forgot password
+ .col.s12
+
+//- block additionalScripts
+ script
+ include js/copy-to-clipboard.js
\ No newline at end of file
diff --git a/server/views/xpub-login.pug b/server/views/xpub-login.pug
new file mode 100644
index 0000000..5be22fd
--- /dev/null
+++ b/server/views/xpub-login.pug
@@ -0,0 +1,65 @@
+extend templates/layout.pug
+
+block content
+ -
+ if (data)
+ var message = data.message
+ data = data == null ? {} : data;
+
+ .container
+ .row
+ .col.s12
+ .row
+ .col.s12
+ .center
+ h2.flow-text Authentication Challenge
+
+ .row
+ .col.s12
+ ul.tabs
+ li.tab.s6
+ a(href="#qr-code-tab") QR Code
+ li.tab.s6
+ a(href="#text-output-tab") Text
+ #qr-code-tab.col.s12
+ p.flow-text Scan QR Code
+ a.copy-to-clipboard(data-clipboard-text=challenge)
+ img.responsive-img(src=qrCode, alt="")
+ #text-output-tab.col.s12
+ p.flow-text
+ small Please sign
+ br
+ span(style="word-wrap:anywhere")= challenge.message
+ br
+ small with the private key from the derivation path
+ br
+ span(style="word-wrap:anywhere")= challenge.derivationPath
+ br
+ small belonging to
+ br
+ span(style="word-wrap:anywhere")= challenge.xpub
+
+ a.btn-flat.copy-to-clipboard(data-clipboard-text=challenge) copy challenge to clipboard
+ form(action="/account/authenticate/response" method="POST")
+ input(type="hidden", name="xpub", value=challenge.xpub)
+ input(type="hidden", name="message", value=challenge.message)
+ input(type="hidden", name="derivationPath", value=challenge.derivationPath)
+
+ input(type="hidden", name="request[signature]", value=challenge.request.signature)
+ input(type="hidden", name="request[signatureDerivationPath]", value=challenge.request.signatureDerivationPath)
+ .row
+
+
+ .row
+
+ //-
+
+
+ //- p.center
+ a.center(href="/reset-password") forgot password
+ .col.s12
+
+//- block additionalScripts
+ script
+ include js/copy-to-clipboard.js
\ No newline at end of file