diff --git a/lib/web/web.go b/lib/web/web.go index 5b7e07e3b1a..4e9ab5a3260 100644 --- a/lib/web/web.go +++ b/lib/web/web.go @@ -243,8 +243,8 @@ func (m *Handler) Close() error { type webSettings struct { Auth struct { OIDCConnectors []string `json:"oidc_connectors"` + U2fAppId string `json:"u2f_appid"` } `json:"auth"` - U2fAppId string `json:"u2f_appid"` } func (m *Handler) getSettings(w http.ResponseWriter, r *http.Request) (interface{}, error) { @@ -263,7 +263,7 @@ func (m *Handler) getSettings(w http.ResponseWriter, r *http.Request) (interface if err != nil { return nil, trace.Wrap(err) } - settings.U2fAppId = u2fAppId + settings.Auth.U2fAppId = u2fAppId out, err := json.Marshal(settings) if err != nil { return nil, trace.Wrap(err) diff --git a/web/src/app/components/login.jsx b/web/src/app/components/login.jsx index 92952b63635..0cc8b71be26 100644 --- a/web/src/app/components/login.jsx +++ b/web/src/app/components/login.jsx @@ -75,6 +75,7 @@ var LoginInputForm = React.createClass({ let {isProcessing, isFailed, message } = this.props.attemp; let providers = cfg.getAuthProviders(); let useGoogle = providers.indexOf(PROVIDER_GOOGLE) !== -1; + let useU2f = !!cfg.getU2fAppId(); return (
@@ -90,7 +91,7 @@ var LoginInputForm = React.createClass({ - + { useU2f ? : null } { useGoogle ? : null } { isProcessing && this.state.secondFactorType == SECOND_FACTOR_TYPE_U2F ? () : null } { isFailed ? () : null } diff --git a/web/src/app/components/newUser.jsx b/web/src/app/components/newUser.jsx index 79762441ce9..752b5e4dfdf 100644 --- a/web/src/app/components/newUser.jsx +++ b/web/src/app/components/newUser.jsx @@ -23,6 +23,7 @@ var GoogleAuthInfo = require('./googleAuthLogo'); var {ErrorPage, ErrorTypes} = require('./msgPage'); var {TeleportLogo} = require('./icons.jsx'); var {SECOND_FACTOR_TYPE_HOTP, SECOND_FACTOR_TYPE_U2F} = require('app/services/auth'); +var cfg = require('app/config'); var InviteInputForm = React.createClass({ @@ -87,6 +88,7 @@ var InviteInputForm = React.createClass({ render() { let {isProcessing, isFailed, message } = this.props.attemp; + let useU2f = !!cfg.getU2fAppId(); return (

Get started with Teleport

@@ -117,6 +119,7 @@ var InviteInputForm = React.createClass({ className="form-control" placeholder="Password confirm"/> + { useU2f ?
U2F
+ : null } { this.state.secondFactorType == SECOND_FACTOR_TYPE_HOTP ?