nil, "body"=>nil, "id"=>"1"}>
- >> f.
- Display all 152 possibilities? (y or n)
-
-Finally, when you're ready to resume execution, you can enter "cont".
-
-
-== Console
-
-The console is a Ruby shell, which allows you to interact with your
-application's domain model. Here you'll have all parts of the application
-configured, just like it is when the application is running. You can inspect
-domain models, change values, and save to the database. Starting the script
-without arguments will launch it in the development environment.
-
-To start the console, run rails console from the application
-directory.
-
-Options:
-
-* Passing the -s, --sandbox argument will rollback any modifications
- made to the database.
-* Passing an environment name as an argument will load the corresponding
- environment. Example: rails console production.
-
-To reload your controllers and models after launching the console run
-reload!
-
-More information about irb can be found at:
-link:http://www.rubycentral.org/pickaxe/irb.html
-
-
-== dbconsole
-
-You can go to the command line of your database directly through rails
-dbconsole. You would be connected to the database with the credentials
-defined in database.yml. Starting the script without arguments will connect you
-to the development database. Passing an argument will connect you to a different
-database, like rails dbconsole production. Currently works for MySQL,
-PostgreSQL and SQLite 3.
-
-== Description of Contents
-
-The default directory structure of a generated Ruby on Rails application:
-
- |-- app
- | |-- assets
- | |-- images
- | |-- javascripts
- | `-- stylesheets
- | |-- controllers
- | |-- helpers
- | |-- mailers
- | |-- models
- | `-- views
- | `-- layouts
- |-- config
- | |-- environments
- | |-- initializers
- | `-- locales
- |-- db
- |-- doc
- |-- lib
- | `-- tasks
- |-- log
- |-- public
- |-- script
- |-- test
- | |-- fixtures
- | |-- functional
- | |-- integration
- | |-- performance
- | `-- unit
- |-- tmp
- | |-- cache
- | |-- pids
- | |-- sessions
- | `-- sockets
- `-- vendor
- |-- assets
- `-- stylesheets
- `-- plugins
-
-app
- Holds all the code that's specific to this particular application.
-
-app/assets
- Contains subdirectories for images, stylesheets, and JavaScript files.
-
-app/controllers
- Holds controllers that should be named like weblogs_controller.rb for
- automated URL mapping. All controllers should descend from
- ApplicationController which itself descends from ActionController::Base.
-
-app/models
- Holds models that should be named like post.rb. Models descend from
- ActiveRecord::Base by default.
-
-app/views
- Holds the template files for the view that should be named like
- weblogs/index.html.erb for the WeblogsController#index action. All views use
- eRuby syntax by default.
-
-app/views/layouts
- Holds the template files for layouts to be used with views. This models the
- common header/footer method of wrapping views. In your views, define a layout
- using the layout :default and create a file named default.html.erb.
- Inside default.html.erb, call <% yield %> to render the view using this
- layout.
-
-app/helpers
- Holds view helpers that should be named like weblogs_helper.rb. These are
- generated for you automatically when using generators for controllers.
- Helpers can be used to wrap functionality for your views into methods.
-
-config
- Configuration files for the Rails environment, the routing map, the database,
- and other dependencies.
-
-db
- Contains the database schema in schema.rb. db/migrate contains all the
- sequence of Migrations for your schema.
-
-doc
- This directory is where your application documentation will be stored when
- generated using rake doc:app
-
-lib
- Application specific libraries. Basically, any kind of custom code that
- doesn't belong under controllers, models, or helpers. This directory is in
- the load path.
-
-public
- The directory available for the web server. Also contains the dispatchers and the
- default HTML files. This should be set as the DOCUMENT_ROOT of your web
- server.
-
-script
- Helper scripts for automation and generation.
-
-test
- Unit and functional tests along with fixtures. When using the rails generate
- command, template test files will be generated for you and placed in this
- directory.
-
-vendor
- External libraries that the application depends on. Also includes the plugins
- subdirectory. If the app has frozen rails, those gems also go here, under
- vendor/rails/. This directory is in the load path.
diff --git a/app/models/user.rb b/app/models/user.rb
index 02543cc..02717d9 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -2,10 +2,11 @@ class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
- devise :database_authenticatable, :registerable,
- :recoverable, :rememberable, :trackable, :validatable
+ devise :database_authenticatable, :rememberable, :trackable, :validatable,
+ :pam_authenticatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
+ attr_accessible :username
# attr_accessible :title, :body
end
diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb
index f9bc2c1..3d526fb 100644
--- a/app/views/devise/sessions/new.html.erb
+++ b/app/views/devise/sessions/new.html.erb
@@ -1,8 +1,8 @@
Sign in
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
- <%= f.label :email %>
- <%= f.email_field :email, :autofocus => true %>
+ <%= f.label :username %>
+ <%= f.text_field :username, :autofocus => true %>
<%= f.label :password %>
<%= f.password_field :password %>
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index 3c56e94..9711eda 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -54,9 +54,6 @@
<% else %>
<%= link_to "Sign in", new_user_session_path,
:method => :get %>
- <%= link_to "Register", new_user_registration_path,
- :method => :get %>
-
<% end %>
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
index d2b2cfe..fa4f494 100644
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
@@ -23,7 +23,7 @@ Devise.setup do |config|
# session. If you need permissions, you should implement that in a before filter.
# You can also supply a hash where the value is a boolean determining whether
# or not authentication should be aborted when the value is not present.
- # config.authentication_keys = [ :email ]
+ config.authentication_keys = [ :username ]
# Configure parameters from the request object used for authentication. Each entry
# given should be a request method and it will automatically be passed to the
diff --git a/db/migrate/20130413054153_add_username_to_users.rb b/db/migrate/20130413054153_add_username_to_users.rb
new file mode 100644
index 0000000..3b71a27
--- /dev/null
+++ b/db/migrate/20130413054153_add_username_to_users.rb
@@ -0,0 +1,5 @@
+class AddUsernameToUsers < ActiveRecord::Migration
+ def change
+ add_column :users, :username, :string
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 5c80be9..41b8f56 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20130412012722) do
+ActiveRecord::Schema.define(:version => 20130413054153) do
create_table "alerts", :force => true do |t|
t.integer "user_id"
@@ -55,6 +55,7 @@ ActiveRecord::Schema.define(:version => 20130412012722) do
t.string "last_sign_in_ip"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
+ t.string "username"
end
add_index "users", ["email"], :name => "index_users_on_email", :unique => true
diff --git a/lib/custom_auth.rb b/lib/custom_auth.rb
new file mode 100644
index 0000000..dc63362
--- /dev/null
+++ b/lib/custom_auth.rb
@@ -0,0 +1,36 @@
+module CustomAuth
+ module Devise
+ module Strategies
+ class Kerb < ::Devise::Strategies::Base
+ def valid?
+ params[:user] && (params[:user][:username] || params[:user][:password])
+ end
+
+ def authenticate!
+ if check_kerb_auth(params[:username], params[:password])
+ u = User.find(:first,
+ :conditions => { :username => params[:username] }) ||
+ User.create({ :username => login }
+ )
+ else
+ fail!("Could not log in")
+ end
+ end
+
+ def check_kerb_auth(username, password)
+ require 'krb5_auth'
+ include Krb5Auth
+
+ return false if username.blank? or password.blank?
+
+ begin
+ kerberos = Krb5.new
+ return kerberos.get_init_creds_password(username, password)
+ rescue Krb5Auth::Krb5::Exception
+ return false
+ end
+ end
+ end
+ end
+ end
+end