Merge pull request #27537 from nextcloud/fix/noid/webauthn-localhost

Allow WebAuthn on localhost as well
This commit is contained in:
Pytal 2021-06-17 08:53:49 -07:00 committed by GitHub
commit 18ff2612a1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 37 additions and 15 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -20,7 +20,7 @@
-->
<template>
<div v-if="!isHttps">
<div v-if="!isHttps && !isLocalhost">
{{ t('settings', 'Passwordless authentication requires a secure connection.') }}
</div>
<div v-else>
@ -89,6 +89,10 @@ export default {
type: Boolean,
default: false,
},
isLocalhost: {
type: Boolean,
default: false,
},
},
data() {
return {

View file

@ -40,7 +40,10 @@
{{ t('settings', 'Your browser does not support WebAuthn.') }}
</p>
<AddDevice v-if="hasPublicKeyCredential" :is-https="isHttps" @added="deviceAdded" />
<AddDevice v-if="hasPublicKeyCredential"
:is-https="isHttps"
:is-localhost="isLocalhost"
@added="deviceAdded" />
</div>
</template>
@ -69,6 +72,10 @@ export default {
type: Boolean,
default: false,
},
isLocalhost: {
type: Boolean,
default: false,
},
hasPublicKeyCredential: {
type: Boolean,
default: false,

View file

@ -36,6 +36,7 @@ new View({
propsData: {
initialDevices: devices,
isHttps: window.location.protocol === 'https:',
isLocalhost: window.location.hostname === 'localhost',
hasPublicKeyCredential: typeof (window.PublicKeyCredential) !== 'undefined',
},
}).$mount('#security-webauthn')

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,5 +1,5 @@
<template>
<form v-if="isHttps && hasPublicKeyCredential"
<form v-if="(isHttps || isLocalhost) && hasPublicKeyCredential"
ref="loginForm"
method="post"
name="login"
@ -32,7 +32,7 @@
<div v-else-if="!hasPublicKeyCredential">
{{ t('core', 'Passwordless authentication is not supported in your browser.') }}
</div>
<div v-else-if="!isHttps">
<div v-else-if="!isHttps && !isLocalhost">
{{ t('core', 'Passwordless authentication is only available over a secure connection.') }}
</div>
</template>
@ -73,6 +73,10 @@ export default {
type: Boolean,
default: false,
},
isLocalhost: {
type: Boolean,
default: false,
},
hasPublicKeyCredential: {
type: Boolean,
default: false,

View file

@ -71,6 +71,7 @@ new View({
hasPasswordless: fromStateOr('webauthn-available', false),
countAlternativeLogins: fromStateOr('countAlternativeLogins', false),
isHttps: window.location.protocol === 'https:',
isLocalhost: window.location.hostname === 'localhost',
hasPublicKeyCredential: typeof (window.PublicKeyCredential) !== 'undefined',
hideLoginForm: fromStateOr('hideLoginForm', false),
},

View file

@ -73,6 +73,7 @@
:inverted-colors="invertedColors"
:auto-complete-allowed="autoCompleteAllowed"
:is-https="isHttps"
:is-localhost="isLocalhost"
:has-public-key-credential="hasPublicKeyCredential"
@submit="loading = true" />
<a href="#" @click.prevent="passwordlessLogin = false">
@ -176,6 +177,10 @@ export default {
type: Boolean,
default: false,
},
isLocalhost: {
type: Boolean,
default: false,
},
hasPublicKeyCredential: {
type: Boolean,
default: false,