diff --git a/tracks/app/controllers/login_controller.rb b/tracks/app/controllers/login_controller.rb index 3675cb02..2fc038f3 100644 --- a/tracks/app/controllers/login_controller.rb +++ b/tracks/app/controllers/login_controller.rb @@ -25,7 +25,7 @@ class LoginController < ApplicationController end when :get if User.no_users_yet? - redirect_to :action => 'signup' + redirect_to :controller => 'users', :action => 'new' end end end diff --git a/tracks/app/controllers/users_controller.rb b/tracks/app/controllers/users_controller.rb index 82f9693f..9ff49a2f 100644 --- a/tracks/app/controllers/users_controller.rb +++ b/tracks/app/controllers/users_controller.rb @@ -6,6 +6,8 @@ class UsersController < ApplicationController end before_filter :admin_login_required, :only => [ :index, :destroy ] + skip_before_filter :login_required, :only => [ :new, :create ] + prepend_before_filter :login_optional, :only => [ :new, :create ] def index @page_title = "TRACKS::Manage Users" @@ -19,13 +21,15 @@ class UsersController < ApplicationController def new if User.no_users_yet? - @page_title = "Sign up as the admin user" + @page_title = "TRACKS::Sign up as the admin user" + @heading = "Welcome to TRACKS. To get started, please create an admin account:" @user = get_new_user elsif @user && @user.is_admin? - @page_title = "Sign up a new user" + @page_title = "TRACKS::Sign up a new user" + @heading = "Sign up a new user:" @user = get_new_user else # all other situations (i.e. a non-admin is logged in, or no one is logged in, but we have some users) - @page_title = "No signups" + @page_title = "TRACKS::No signups" @admin_email = User.find_admin.preference.admin_email render :action => "nosignup", :layout => "login" return diff --git a/tracks/app/views/users/new.rhtml b/tracks/app/views/users/new.rhtml index d620f68e..fa0c30fd 100644 --- a/tracks/app/views/users/new.rhtml +++ b/tracks/app/views/users/new.rhtml @@ -5,7 +5,7 @@ <%= render_flash %> -

<%= @page_title -%>

+

<%= @heading -%>

@@ -22,7 +22,7 @@ - +
diff --git a/tracks/lib/login_system.rb b/tracks/lib/login_system.rb index 1a423c5c..cd2edd52 100644 --- a/tracks/lib/login_system.rb +++ b/tracks/lib/login_system.rb @@ -66,6 +66,22 @@ module LoginSystem return false end + def login_optional + + if session['user_id'] and authorize?(get_current_user) + return true + end + + http_user, http_pass = get_basic_auth_data + if user = User.authenticate(http_user, http_pass) + session['user_id'] = user.id + get_current_user + return true + end + + return true + end + def get_current_user if @user.nil? && session['user_id'] @user = User.find session['user_id'], :include => :preference diff --git a/tracks/test/functional/login_controller_test.rb b/tracks/test/functional/login_controller_test.rb index 4171fc84..273b2b72 100644 --- a/tracks/test/functional/login_controller_test.rb +++ b/tracks/test/functional/login_controller_test.rb @@ -50,7 +50,7 @@ class LoginControllerTest < Test::Unit::TestCase def test_login_with_no_users_redirects_to_signup User.delete_all get :login - assert_redirected_to :controller => 'login', :action => 'signup' + assert_redirected_to :controller => 'users', :action => 'new' end def test_logout diff --git a/tracks/test/integration/create_user_api_test.rb b/tracks/test/integration/create_user_api_test.rb index 333ba241..db58790d 100644 --- a/tracks/test/integration/create_user_api_test.rb +++ b/tracks/test/integration/create_user_api_test.rb @@ -16,7 +16,7 @@ class CreateUserControllerTest < ActionController::IntegrationTest def test_fails_with_401_if_not_authorized_user authenticated_post_xml_to_user_create @@foobar_postdata, 'nobody', 'nohow' - assert_401_unauthorized + assert_401_unauthorized_admin end def test_fails_with_401_if_not_admin_user