Feature #35001 ยป 35001.patch
| app/controllers/application_controller.rb | ||
|---|---|---|
| 129 | 129 | 
    elsif /\ABasic /i.match?(request.authorization.to_s)  | 
| 130 | 130 | 
    # HTTP Basic, either username/password or API key/random  | 
| 131 | 131 | 
    authenticate_with_http_basic do |username, password|  | 
| 132 | 
    user = User.try_to_login(username, password) || User.find_by_api_key(username)  | 
|
| 132 | 
    user = User.try_to_login(username, password)  | 
|
| 133 | 
    # Don't allow using username/password when two-factor auth is active  | 
|
| 134 | 
    if user&.twofa_active?  | 
|
| 135 | 
    render_error :message => 'HTTP Basic authentication is not allowed. Use API key instead', :status => 401  | 
|
| 136 | 
    return  | 
|
| 137 | 
    end  | 
|
| 138 | ||
| 139 | 
    user ||= User.find_by_api_key(username)  | 
|
| 133 | 140 | 
    end  | 
| 134 | 141 | 
    if user && user.must_change_password?  | 
| 135 | 142 | 
    render_error :message => 'You must change your password', :status => 403  | 
| test/integration/api_test/authentication_test.rb | ||
|---|---|---|
| 48 | 48 | 
    assert_response 401  | 
| 49 | 49 | 
    end  | 
| 50 | 50 | |
| 51 | 
    def test_api_should_deny_http_basic_auth_if_twofa_is_active  | 
|
| 52 | 
    user = User.generate! do |user|  | 
|
| 53 | 
    user.password = 'my_password'  | 
|
| 54 | 
    user.update(twofa_scheme: 'totp')  | 
|
| 55 | 
    end  | 
|
| 56 | 
    get '/users/current.xml', :headers => credentials(user.login, 'my_password')  | 
|
| 57 | 
    assert_response 401  | 
|
| 58 | 
    end  | 
|
| 59 | ||
| 51 | 60 | 
    def test_api_should_accept_http_basic_auth_using_api_key  | 
| 52 | 61 | 
    user = User.generate!  | 
| 53 | 62 | 
    token = Token.create!(:user => user, :action => 'api')  |