Merge pull request #1613 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes
This commit is contained in:
		
						commit
						e660a7bbb0
					
				@ -44,7 +44,7 @@ class Auth::SessionsController < Devise::SessionsController
 | 
				
			|||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def webauthn_options
 | 
					  def webauthn_options
 | 
				
			||||||
    user = find_user
 | 
					    user = User.find_by(id: session[:attempt_user_id])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if user&.webauthn_enabled?
 | 
					    if user&.webauthn_enabled?
 | 
				
			||||||
      options_for_get = WebAuthn::Credential.options_for_get(
 | 
					      options_for_get = WebAuthn::Credential.options_for_get(
 | 
				
			||||||
 | 
				
			|||||||
@ -106,10 +106,10 @@ class Compose extends React.PureComponent {
 | 
				
			|||||||
            <Link to='/notifications' className='drawer__tab' title={intl.formatMessage(messages.notifications)} aria-label={intl.formatMessage(messages.notifications)}><Icon id='bell' fixedWidth /></Link>
 | 
					            <Link to='/notifications' className='drawer__tab' title={intl.formatMessage(messages.notifications)} aria-label={intl.formatMessage(messages.notifications)}><Icon id='bell' fixedWidth /></Link>
 | 
				
			||||||
          )}
 | 
					          )}
 | 
				
			||||||
          {!columns.some(column => column.get('id') === 'COMMUNITY') && (
 | 
					          {!columns.some(column => column.get('id') === 'COMMUNITY') && (
 | 
				
			||||||
            <Link to='/local' className='drawer__tab' title={intl.formatMessage(messages.community)} aria-label={intl.formatMessage(messages.community)}><Icon id='users' fixedWidth /></Link>
 | 
					            <Link to='/public/local' className='drawer__tab' title={intl.formatMessage(messages.community)} aria-label={intl.formatMessage(messages.community)}><Icon id='users' fixedWidth /></Link>
 | 
				
			||||||
          )}
 | 
					          )}
 | 
				
			||||||
          {!columns.some(column => column.get('id') === 'PUBLIC') && (
 | 
					          {!columns.some(column => column.get('id') === 'PUBLIC') && (
 | 
				
			||||||
            <Link to='/federated' className='drawer__tab' title={intl.formatMessage(messages.public)} aria-label={intl.formatMessage(messages.public)}><Icon id='globe' fixedWidth /></Link>
 | 
					            <Link to='/public' className='drawer__tab' title={intl.formatMessage(messages.public)} aria-label={intl.formatMessage(messages.public)}><Icon id='globe' fixedWidth /></Link>
 | 
				
			||||||
          )}
 | 
					          )}
 | 
				
			||||||
          <a href='/settings/preferences' className='drawer__tab' title={intl.formatMessage(messages.preferences)} aria-label={intl.formatMessage(messages.preferences)}><Icon id='cog' fixedWidth /></a>
 | 
					          <a href='/settings/preferences' className='drawer__tab' title={intl.formatMessage(messages.preferences)} aria-label={intl.formatMessage(messages.preferences)}><Icon id='cog' fixedWidth /></a>
 | 
				
			||||||
          <a href='/auth/sign_out' className='drawer__tab' title={intl.formatMessage(messages.logout)} aria-label={intl.formatMessage(messages.logout)} onClick={this.handleLogoutClick}><Icon id='sign-out' fixedWidth /></a>
 | 
					          <a href='/auth/sign_out' className='drawer__tab' title={intl.formatMessage(messages.logout)} aria-label={intl.formatMessage(messages.logout)} onClick={this.handleLogoutClick}><Icon id='sign-out' fixedWidth /></a>
 | 
				
			||||||
 | 
				
			|||||||
@ -184,7 +184,7 @@
 | 
				
			|||||||
    "eslint-plugin-jsx-a11y": "~6.4.1",
 | 
					    "eslint-plugin-jsx-a11y": "~6.4.1",
 | 
				
			||||||
    "eslint-plugin-promise": "~5.1.0",
 | 
					    "eslint-plugin-promise": "~5.1.0",
 | 
				
			||||||
    "eslint-plugin-react": "~7.26.0",
 | 
					    "eslint-plugin-react": "~7.26.0",
 | 
				
			||||||
    "jest": "^27.2.0",
 | 
					    "jest": "^27.2.3",
 | 
				
			||||||
    "raf": "^3.4.1",
 | 
					    "raf": "^3.4.1",
 | 
				
			||||||
    "react-intl-translations-manager": "^5.0.3",
 | 
					    "react-intl-translations-manager": "^5.0.3",
 | 
				
			||||||
    "react-test-renderer": "^16.14.0",
 | 
					    "react-test-renderer": "^16.14.0",
 | 
				
			||||||
@ -196,7 +196,7 @@
 | 
				
			|||||||
    "kind-of": "^6.0.3"
 | 
					    "kind-of": "^6.0.3"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "optionalDependencies": {
 | 
					  "optionalDependencies": {
 | 
				
			||||||
    "bufferutil": "^4.0.3",
 | 
					    "bufferutil": "^4.0.4",
 | 
				
			||||||
    "utf-8-validate": "^5.0.6"
 | 
					    "utf-8-validate": "^5.0.6"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -519,4 +519,33 @@ RSpec.describe Auth::SessionsController, type: :controller do
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'GET #webauthn_options' do
 | 
				
			||||||
 | 
					    context 'with WebAuthn and OTP enabled as second factor' do
 | 
				
			||||||
 | 
					      let(:domain) { "#{Rails.configuration.x.use_https ? 'https' : 'http' }://#{Rails.configuration.x.web_domain}" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      let(:fake_client) { WebAuthn::FakeClient.new(domain) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      let!(:user) do
 | 
				
			||||||
 | 
					        Fabricate(:user, email: 'x@y.com', password: 'abcdefgh', otp_required_for_login: true, otp_secret: User.generate_otp_secret(32))
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      before do
 | 
				
			||||||
 | 
					        user.update(webauthn_id: WebAuthn.generate_user_id)
 | 
				
			||||||
 | 
					        public_key_credential = WebAuthn::Credential.from_create(fake_client.create)
 | 
				
			||||||
 | 
					        user.webauthn_credentials.create(
 | 
				
			||||||
 | 
					          nickname: 'SecurityKeyNickname',
 | 
				
			||||||
 | 
					          external_id: public_key_credential.id,
 | 
				
			||||||
 | 
					          public_key: public_key_credential.public_key,
 | 
				
			||||||
 | 
					          sign_count: '1000'
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        post :create, params: { user: { email: user.email, password: user.password } }
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it 'returns http success' do
 | 
				
			||||||
 | 
					        get :webauthn_options
 | 
				
			||||||
 | 
					        expect(response).to have_http_status :ok
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user