From 0254f9aa2c06a49bfb97d624477ef07f934128eb Mon Sep 17 00:00:00 2001 From: Will Bradley Date: Sun, 14 Oct 2012 05:46:19 -0700 Subject: [PATCH] Moved card stuff from users model to new card model --- app/controllers/cards_controller.rb | 109 ++++++++++++++++++ app/controllers/users_controller.rb | 109 ------------------ app/models/card.rb | 77 +++++++++++++ app/models/user.rb | 79 +------------ app/views/cards/_form.html.erb | 37 ++++++ app/views/cards/edit.html.erb | 6 + app/views/cards/index.html.erb | 34 ++++++ app/views/cards/new.html.erb | 5 + app/views/cards/show.html.erb | 24 ++++ app/views/cards/upload.html.erb | 14 +++ .../{users => cards}/upload_all.html.erb | 2 +- app/views/layouts/application.html.erb | 2 +- app/views/users/_form.html.erb | 55 --------- app/views/users/edit.html.erb | 6 - app/views/users/index.html.erb | 34 ------ app/views/users/new.html.erb | 5 - app/views/users/show.html.erb | 24 ---- app/views/users/upload.html.erb | 14 --- config/routes.rb | 6 +- db/migrate/20121014114058_create_cards.rb | 10 ++ .../20121014114527_add_user_id_to_cards.rb | 5 + .../20121014120140_add_name_to_cards.rb | 5 + .../20121014120609_move_card_data_to_cards.rb | 11 ++ .../20121014122548_remove_card_from_users.rb | 13 +++ db/schema.rb | 14 ++- test/fixtures/cards.yml | 9 ++ test/unit/card_test.rb | 7 ++ 27 files changed, 384 insertions(+), 332 deletions(-) create mode 100644 app/controllers/cards_controller.rb delete mode 100644 app/controllers/users_controller.rb create mode 100644 app/models/card.rb create mode 100644 app/views/cards/_form.html.erb create mode 100644 app/views/cards/edit.html.erb create mode 100644 app/views/cards/index.html.erb create mode 100644 app/views/cards/new.html.erb create mode 100644 app/views/cards/show.html.erb create mode 100644 app/views/cards/upload.html.erb rename app/views/{users => cards}/upload_all.html.erb (79%) delete mode 100644 app/views/users/_form.html.erb delete mode 100644 app/views/users/edit.html.erb delete mode 100644 app/views/users/index.html.erb delete mode 100644 app/views/users/new.html.erb delete mode 100644 app/views/users/show.html.erb delete mode 100644 app/views/users/upload.html.erb create mode 100644 db/migrate/20121014114058_create_cards.rb create mode 100644 db/migrate/20121014114527_add_user_id_to_cards.rb create mode 100644 db/migrate/20121014120140_add_name_to_cards.rb create mode 100644 db/migrate/20121014120609_move_card_data_to_cards.rb create mode 100644 db/migrate/20121014122548_remove_card_from_users.rb create mode 100644 test/fixtures/cards.yml create mode 100644 test/unit/card_test.rb diff --git a/app/controllers/cards_controller.rb b/app/controllers/cards_controller.rb new file mode 100644 index 0000000..84b92bc --- /dev/null +++ b/app/controllers/cards_controller.rb @@ -0,0 +1,109 @@ +class CardsController < ApplicationController + load_and_authorize_resource + before_filter :authenticate_user! + + # GET /cards + # GET /cards.json + def index + #@cards = Card.all + #authorize! :read, @cards + @cards = @cards.sort_by{|e| e[:id]} + + respond_to do |format| + format.html # index.html.erb + format.json { render :json => @cards } + end + end + + # GET /cards/1 + # GET /cards/1.json + def show + #@card = Card.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render :json => @card } + end + end + + # PUT /cards/1/upload + def upload + #@card = Card.find(params[:id]) + @upload_result = @card.upload_to_door + + respond_to do |format| + format.html # show.html.erb + format.json { render :json => @upload_result } + end + end + + # PUT /cards/upload_all + def upload_all + @upload_result = Card.upload_all_to_door + + respond_to do |format| + format.html # show.html.erb + format.json { render :json => @upload_result } + end + end + + # GET /cards/new + # GET /cards/new.json + def new + #@card = Card.new + + respond_to do |format| + format.html # new.html.erb + format.json { render :json => @card } + end + end + + # GET /cards/1/edit + def edit + #@card = Card.find(params[:id]) + end + + # POST /cards + # POST /cards.json + def create + #@card = Card.new(params[:card]) + + respond_to do |format| + if @card.save + format.html { redirect_to cards_url, :notice => 'Card was successfully created.' } + format.json { render :json => @card, :status => :created, :location => @card } + else + format.html { render :action => "new" } + format.json { render :json => @card.errors, :status => :unprocessable_entity } + end + end + end + + # PUT /cards/1 + # PUT /cards/1.json + def update + #@card = Card.find(params[:id]) + + respond_to do |format| + if @card.update_attributes(params[:card]) + format.html { redirect_to cards_url, :notice => 'Card was successfully updated.' } + format.json { head :no_content } + else + format.html { render :action => "edit" } + format.json { render :json => @card.errors, :status => :unprocessable_entity } + end + end + end + + # DELETE /cards/1 + # DELETE /cards/1.json + def destroy + #@card = Card.find(params[:id]) + @card.destroy + + respond_to do |format| + format.html { redirect_to cards_url, :notice => 'Card successfully deleted.' } + format.json { head :no_content } + end + end +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb deleted file mode 100644 index 0e82131..0000000 --- a/app/controllers/users_controller.rb +++ /dev/null @@ -1,109 +0,0 @@ -class UsersController < ApplicationController - load_and_authorize_resource - before_filter :authenticate_user! - - # GET /users - # GET /users.json - def index - #@users = User.all - #authorize! :read, @users - @users = @users.sort_by{|e| e[:card_id]} - - respond_to do |format| - format.html # index.html.erb - format.json { render :json => @users } - end - end - - # GET /users/1 - # GET /users/1.json - def show - #@user = User.find(params[:id]) - - respond_to do |format| - format.html # show.html.erb - format.json { render :json => @user } - end - end - - # PUT /users/1/upload - def upload - #@user = User.find(params[:id]) - @upload_result = @user.upload_to_door - - respond_to do |format| - format.html # show.html.erb - format.json { render :json => @upload_result } - end - end - - # PUT /users/upload_all - def upload_all - @upload_result = User.upload_all_to_door - - respond_to do |format| - format.html # show.html.erb - format.json { render :json => @upload_result } - end - end - - # GET /users/new - # GET /users/new.json - def new - #@user = User.new - - respond_to do |format| - format.html # new.html.erb - format.json { render :json => @user } - end - end - - # GET /users/1/edit - def edit - #@user = User.find(params[:id]) - end - - # POST /users - # POST /users.json - def create - #@user = User.new(params[:user]) - - respond_to do |format| - if @user.save - format.html { redirect_to users_url, :notice => 'User was successfully created.' } - format.json { render :json => @user, :status => :created, :location => @user } - else - format.html { render :action => "new" } - format.json { render :json => @user.errors, :status => :unprocessable_entity } - end - end - end - - # PUT /users/1 - # PUT /users/1.json - def update - #@user = User.find(params[:id]) - - respond_to do |format| - if @user.update_attributes(params[:user]) - format.html { redirect_to users_url, :notice => 'User was successfully updated.' } - format.json { head :no_content } - else - format.html { render :action => "edit" } - format.json { render :json => @user.errors, :status => :unprocessable_entity } - end - end - end - - # DELETE /users/1 - # DELETE /users/1.json - def destroy - #@user = User.find(params[:id]) - @user.destroy - - respond_to do |format| - format.html { redirect_to users_url, :notice => 'User successfully deleted.' } - format.json { head :no_content } - end - end -end diff --git a/app/models/card.rb b/app/models/card.rb new file mode 100644 index 0000000..469fb2f --- /dev/null +++ b/app/models/card.rb @@ -0,0 +1,77 @@ +class Card < ActiveRecord::Base + require 'open-uri' + + attr_accessible :id, :user_id, :name, :card_number, :card_permissions + validates_uniqueness_of :card_number + belongs_to :user + + def upload_to_door + # load config values + door_access_url = APP_CONFIG['door_access_url'] + door_access_password = APP_CONFIG['door_access_password'] + + # connect to door access system + source = open("#{door_access_url}?e=#{door_access_password}").read + results = source.scan(/authok/) + if(results.size > 0) then + #only continue if we've got an OK login + cardid = self.id.to_s.rjust(3, '0') #TODO: provide ability for + cardperm = self.card_permissions.to_s.rjust(3, '0') + cardnum = self.card_number.rjust(8, '0') + + source = open("#{door_access_url}?m#{cardid}&p#{cardperm}&t#{cardnum}").read + results = source.scan(/cur/) + + #logout + open("#{door_access_url}?e=0000") + + if(results.size > 0) then + #only return true if we got some kind of decent response + return true + else + # We didn't get a decent response. + return false + end + else + # We didn't get an OK login. + return false + end + end + + def self.upload_all_to_door + @cards = Card.all + @end_results = Array.new + + # load config values + door_access_url = APP_CONFIG['door_access_url'] + door_access_password = APP_CONFIG['door_access_password'] + + source = open("#{door_access_url}?e=#{door_access_password}").read + results = source.scan(/authok/) + if(results.size > 0) then + @cards.each do |u| + #only continue if we've got an OK login + cardid = u.id.to_s.rjust(3, '0') + cardperm = u.card_permissions.to_s.rjust(3, '0') + cardnum = u.card_number.rjust(8, '0') + + source = open("#{door_access_url}?m#{cardid}&p#{cardperm}&t#{cardnum}").read + results = source.scan(/cur/) + + if(results.size > 0) then + #only return true if we got some kind of decent response + @end_results.push([cardid,"OK"]) + else + @end_results.push([cardid,"FAIL"]) + end + end + + #logout + open("#{door_access_url}?e=0000") + else + @end_results.push([cardid,"FAIL"]) + end + + return @end_results + end +end diff --git a/app/models/user.rb b/app/models/user.rb index 4699129..565c09b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2,84 +2,11 @@ class User < ActiveRecord::Base # Include default devise modules. Others available are: # :token_authenticatable, :confirmable, # :lockable, :timeoutable and :omniauthable - devise :database_authenticatable, # :registerable, + devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable # Setup accessible (or protected) attributes for your model - attr_accessible :email, :password, :password_confirmation, :remember_me - require 'open-uri' + attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :admin - attr_accessible :card_id, :card_number, :card_permissions, :name, :admin - validates_uniqueness_of :card_id, :card_number - - - def upload_to_door - # load config values - door_access_url = APP_CONFIG['door_access_url'] - door_access_password = APP_CONFIG['door_access_password'] - - # connect to door access system - source = open("#{door_access_url}?e=#{door_access_password}").read - results = source.scan(/authok/) - if(results.size > 0) then - #only continue if we've got an OK login - usernum = self.card_id.to_s.rjust(3, '0') - userperm = self.card_permissions.to_s.rjust(3, '0') - cardnum = self.card_number.rjust(8, '0') - - source = open("#{door_access_url}?m#{usernum}&p#{userperm}&t#{cardnum}").read - results = source.scan(/cur/) - - #logout - open("#{door_access_url}?e=0000") - - if(results.size > 0) then - #only return true if we got some kind of decent response - return true - else - # We didn't get a decent response. - return false - end - else - # We didn't get an OK login. - return false - end - end - - def self.upload_all_to_door - @users = User.all - @end_results = Array.new - - # load config values - door_access_url = APP_CONFIG['door_access_url'] - door_access_password = APP_CONFIG['door_access_password'] - - source = open("#{door_access_url}?e=#{door_access_password}").read - results = source.scan(/authok/) - if(results.size > 0) then - @users.each do |u| - #only continue if we've got an OK login - usernum = u.card_id.to_s.rjust(3, '0') - userperm = u.card_permissions.to_s.rjust(3, '0') - cardnum = u.card_number.rjust(8, '0') - - source = open("#{door_access_url}?m#{usernum}&p#{userperm}&t#{cardnum}").read - results = source.scan(/cur/) - - if(results.size > 0) then - #only return true if we got some kind of decent response - @end_results.push([usernum,"OK"]) - else - @end_results.push([usernum,"FAIL"]) - end - end - - #logout - open("#{door_access_url}?e=0000") - else - @end_results.push([usernum,"FAIL"]) - end - - return @end_results - end + has_many :cards end diff --git a/app/views/cards/_form.html.erb b/app/views/cards/_form.html.erb new file mode 100644 index 0000000..3a63ed0 --- /dev/null +++ b/app/views/cards/_form.html.erb @@ -0,0 +1,37 @@ +<%= form_for(@card) do |f| %> + <% if @card.errors.any? %> +
+

<%= pluralize(@card.errors.count, "error") %> prohibited this card from being saved:

+ + +
+ <% end %> + +
+ <%= f.label :user %>
+ <%= collection_select(:card, :user_id, User.all.sort_by(&:name), :id, :name) %> +
+
+ <%= f.label :name, "Card Note" %>
+ <%= f.text_field :name %> +
+
+ <%= f.label :id, "Card DB ID" %>
+ <%= f.number_field :id, :in => 10...201 %> +
+
+ <%= f.label :card_number, "Card Number" %>
+ <%= f.text_field :card_number %> +
+
+ <%= f.label :card_permissions %>
+ <%= f.select :card_permissions, [["Enabled",1],["Disabled",255]] %> +
+
+ <%= f.submit %> +
+<% end %> diff --git a/app/views/cards/edit.html.erb b/app/views/cards/edit.html.erb new file mode 100644 index 0000000..2e4f615 --- /dev/null +++ b/app/views/cards/edit.html.erb @@ -0,0 +1,6 @@ +

Editing card

+ +<%= render 'form' %> + +<%= link_to 'Show', @card %> | +<%= link_to 'Back', cards_path %> diff --git a/app/views/cards/index.html.erb b/app/views/cards/index.html.erb new file mode 100644 index 0000000..6791c16 --- /dev/null +++ b/app/views/cards/index.html.erb @@ -0,0 +1,34 @@ +

Listing cards

+ +<%= link_to 'New Card', new_card_path %> +<%= link_to 'Upload all cards', upload_all_path %> + + + + + + + + + + + + +<% if !@cards.blank? %> + <% @cards.each do |card| %> + + + + + + + + + + + <% end %> +<% end %> +
UserNoteDB IDCard #Access?
<%= card.user.name %><%= card.name %><%= card.id %><%= card.card_number %><%= if card.card_permissions == 1 then "Access" end %><%= link_to 'Upload', upload_path(card) %><%= link_to 'Edit', edit_card_path(card) %><%= link_to 'Destroy', card, :confirm => 'Are you sure? WARNING: THIS DOES NOT REMOVE THE CARD FROM THE DOOR SYSTEM! DISABLE AND UPLOAD IT FIRST.', :method => :delete %>
+ +
+ diff --git a/app/views/cards/new.html.erb b/app/views/cards/new.html.erb new file mode 100644 index 0000000..0c279dc --- /dev/null +++ b/app/views/cards/new.html.erb @@ -0,0 +1,5 @@ +

New card

+ +<%= render 'form' %> + +<%= link_to 'Back', cards_path %> diff --git a/app/views/cards/show.html.erb b/app/views/cards/show.html.erb new file mode 100644 index 0000000..381a4bd --- /dev/null +++ b/app/views/cards/show.html.erb @@ -0,0 +1,24 @@ + +

+ Name: + <%= @card.name %> +

+ +

+ Card DB ID: + <%= @card.id %> +

+ +

+ Card Number: + <%= @card.card_number %> +

+ +

+ Card Permissions: + <%= @card.card_permissions %> +

+ +<%= link_to 'Upload to Door', upload_path(@card) %> +<%= link_to 'Edit', edit_card_path(@card) %> | +<%= link_to 'Back', cards_path %> diff --git a/app/views/cards/upload.html.erb b/app/views/cards/upload.html.erb new file mode 100644 index 0000000..01f574c --- /dev/null +++ b/app/views/cards/upload.html.erb @@ -0,0 +1,14 @@ + +<% if @upload_result %> +

+ Upload result: + <%= @card.name %> uploaded successfully. +

+<% else %> +

+ Upload result: + Error uploading <%= @card.name %>. +

+<% end %> + +<%= link_to 'Back', cards_path %> diff --git a/app/views/users/upload_all.html.erb b/app/views/cards/upload_all.html.erb similarity index 79% rename from app/views/users/upload_all.html.erb rename to app/views/cards/upload_all.html.erb index f576dd0..aa6684e 100644 --- a/app/views/users/upload_all.html.erb +++ b/app/views/cards/upload_all.html.erb @@ -9,4 +9,4 @@

-<%= link_to 'Back', users_path %> +<%= link_to 'Back', cards_path %> diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index cb3d6eb..284eb5f 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -8,7 +8,7 @@