basic authentication stuff

This commit is contained in:
2014-04-06 15:02:53 +02:00
parent 07830df9dd
commit dd8f0df6d2
16 changed files with 128 additions and 56 deletions
@@ -1,6 +1,18 @@
#FB.init appId: '168928633304849'
#Ember.Application.initializer
#name: 'authentication',
#initialize: (container, application)->
## register the Facebook authenticator so the session can find it
#container.register 'authenticators:facebook', App.FacebookAuthenticator
#Ember.SimpleAuth.setup(container, application)
@App = Ember.Application.create @App = Ember.Application.create
LOG_TRANSITIONS: true LOG_TRANSITIONS: true
rootElement: '#ember-app-container' rootElement: '#ember-app-container'
obtain_token: (message)->
message ||= ''
window.location = "#{$root_url}/obtain_token?message=#{message}"
Ember.$.ajaxPrefilter (options) -> Ember.$.ajaxPrefilter (options) ->
if options.type.toUpperCase() == 'GET' if options.type.toUpperCase() == 'GET'
@@ -14,6 +14,10 @@ App.ProductOrdersController = Ember.ArrayController.extend
order = @store.createRecord('order', list: list, table: table) order = @store.createRecord('order', list: list, table: table)
new_product_orders = @store.all('product_order').filterProperty('order', null) new_product_orders = @store.all('product_order').filterProperty('order', null)
order.get('product_orders').pushObjects(new_product_orders) order.get('product_orders').pushObjects(new_product_orders)
#error = @ajaxError (jqXHR)=>
#new_product_orders.invoke 'eraseRecord'
#@redirect_to 'index', message: 'order_could_not_be_processed'
order.save().then (response)=> order.save().then (response)=>
new_product_orders.invoke 'eraseRecord' new_product_orders.invoke 'eraseRecord'
if @get('controllers.application.list') if @get('controllers.application.list')
@@ -22,10 +26,10 @@ App.ProductOrdersController = Ember.ArrayController.extend
# Get list info from the server # Get list info from the server
@get('controllers.application').setCurrentList -> @get('controllers.application').setCurrentList ->
@transitionToRoute 'active_list' @transitionToRoute 'active_list'
, (jqXHR)=> , @ajaxError (jqXHR)=>
debugger
new_product_orders.invoke 'eraseRecord' new_product_orders.invoke 'eraseRecord'
@redirect_to 'index', message: 'order_could_not_be_processed' @redirect_to 'index', message: 'order_could_not_be_processed'
#orders = @store.all('product_order').toArray() #orders = @store.all('product_order').toArray()
#data = orders.map( (order)->order.serialize() ) #data = orders.map( (order)->order.serialize() )
#dataObject = {order: {}} #dataObject = {order: {}}
@@ -3,7 +3,7 @@ App.SelectQrcodeController = Ember.Controller.extend
selectQr: (table)-> selectQr: (table)->
Qstorage.setItem 'table_id', table._id Qstorage.setItem 'table_id', table._id
@secured -> @secured ->
$.getJSON(data_host + '/user/table_info.json?'+@authentication_string+'&table_id='+table._id).then (res)=> $.getJSON($data_host + '/user/table_info.json?'+@authentication_string+'&table_id='+table._id).then (res)=>
if res.current_table_id if res.current_table_id
if res.other_supplier if res.other_supplier
@redirect_to 'user_root', message: 'table_is_from_other_supplier' @redirect_to 'user_root', message: 'table_is_from_other_supplier'
@@ -24,7 +24,7 @@ App.TableController = Ember.ObjectController.extend
@store.createRecord 'product_order', product: product @store.createRecord 'product_order', product: product
joinOccupiedTable: -> joinOccupiedTable: ->
#@secured => #@secured =>
$.post('/user/join_occupied_table.json', table_id: @get('model.id')) Ember.$.post('/user/join_occupied_table.json', table_id: @get('model.id'))
@set 'join_request_sent', true # keeps the button deactivated @set 'join_request_sent', true # keeps the button deactivated
toggleProductCategory: (product_category)-> toggleProductCategory: (product_category)->
product_category.set 'collapsed', not product_category.get('collapsed') product_category.set 'collapsed', not product_category.get('collapsed')
@@ -1,8 +1,17 @@
ControllerExtensions = Ember.Mixin.create
ajaxError: (callback)->
handler = (jqXHR, textStatus, errorThrown)=>
console.log "Error: #{textStatus}: #{errorThrown}"
callback.call(@, jqXHR)
if jqXHR.status == 401
App.__container__.lookup('route:application').unauthorized()
handler
Ember.ArrayController.reopen ControllerExtensions
Ember.Controller.reopen Ember.Controller.reopen
needs: ['application'] needs: ['application']
secured: (callback)-> secured: (callback)->
unless Qstorage.getItem('auth_token') && typeof(Qstorage.getItem('auth_token')) == 'string' && Qstorage.getItem('auth_token').length > 0 unless Qstorage.getItem('auth_token') && typeof(Qstorage.getItem('auth_token')) == 'string' && Qstorage.getItem('auth_token').length > 0
return @transitionToRoute('obtain_token') return App.obtain_token()
@authentication_string = 'auth_token='+Qstorage.getItem('auth_token') @authentication_string = 'auth_token='+Qstorage.getItem('auth_token')
@authentication_object = {auth_token: Qstorage.getItem('auth_token')} @authentication_object = {auth_token: Qstorage.getItem('auth_token')}
callback.call(@) if callback callback.call(@) if callback
@@ -52,7 +61,7 @@ Ember.ArrayController.reopen
needs: ['application'] needs: ['application']
secured: (callback)-> secured: (callback)->
unless Qstorage.getItem('auth_token') && typeof(Qstorage.getItem('auth_token')) == 'string' && Qstorage.getItem('auth_token').length > 0 unless Qstorage.getItem('auth_token') && typeof(Qstorage.getItem('auth_token')) == 'string' && Qstorage.getItem('auth_token').length > 0
return @transitionToRoute('obtain_token') return App.obtain_token()
@authentication_string = 'auth_token='+Qstorage.getItem('auth_token') @authentication_string = 'auth_token='+Qstorage.getItem('auth_token')
@authentication_object = {auth_token: Qstorage.getItem('auth_token')} @authentication_object = {auth_token: Qstorage.getItem('auth_token')}
callback.call(@) if callback callback.call(@) if callback
@@ -6,7 +6,7 @@ App.Router.reopen
App.Router.map -> App.Router.map ->
@route 'select_qrcode' @route 'select_qrcode'
@route 'obtain_token' #@route 'obtain_token'
@route 'active_list' @route 'active_list'
@route 'table', path: '/tables/:table_id' @route 'table', path: '/tables/:table_id'
@resource 'join_requests' @resource 'join_requests'
@@ -1,9 +1,10 @@
App.ApplicationRoute = Ember.Route.extend App.ApplicationRoute = Ember.Route.extend
setupController: (controller)-> setupController: (controller)->
#@controllerFor('product_orders').set 'model', @store.filter('product_order', (po)-> !po.get('order')) # does not work (yet) #@controllerFor('product_orders').set 'model', @store.filter('product_order', (po)-> !po.get('order')) # does not work (yet)
debugger
@controllerFor('product_orders').set 'model', @store.filter('product_order', (po)-> !po.get('id')) @controllerFor('product_orders').set 'model', @store.filter('product_order', (po)-> !po.get('id'))
controller.secured -> controller.secured ->
faye = new Faye.Client(event_host) faye = new Faye.Client($event_host)
user_id = Qstorage.getItem('user_id') user_id = Qstorage.getItem('user_id')
faye.subscribe "/user/"+user_id, (e)=> faye.subscribe "/user/"+user_id, (e)=>
console.log e console.log e
@@ -13,8 +14,7 @@ App.ApplicationRoute = Ember.Route.extend
unauthorized: -> unauthorized: ->
Qstorage.setItem('auth_token', '') Qstorage.setItem('auth_token', '')
@controllerFor('application').set 'list', null @controllerFor('application').set 'list', null
@transitionTo('obtain_token').then => App.obtain_token(t('messages.unauthorized'))
@controllerFor('application').set('notice', t('messages.unauthorized'))
actions: actions:
openModal: (modalName, model)-> openModal: (modalName, model)->
@controllerFor(modalName).set('model', model) @controllerFor(modalName).set('model', model)
@@ -33,12 +33,14 @@ App.ApplicationRoute = Ember.Route.extend
ok: options.ok ok: options.ok
listNeedsPayment: -> listNeedsPayment: ->
@get('controller').secured -> @get('controller').secured ->
$.post(data_host + '/user/list_needs_payment.json', @authentication_object).then (res) => Ember.$.post '/user/list_needs_payment.json'
@set('list.needs_payment', true) #Ember.$.post('/user/list_needs_payment.json').then (res) =>
#@set('list.needs_payment', true) # also done by faye
listNeedsHelp: -> listNeedsHelp: ->
@get('controller').secured -> @get('controller').secured ->
$.post(data_host + '/user/needs_help.json', @authentication_object).then (res) => Ember.$.post '/user/needs_help.json'
@set('list.needs_help', true) #Ember.$.post('/user/needs_help.json').then (res) =>
#@set('list.needs_help', true) # also done by faye
scanQr: -> scanQr: ->
@transitionTo 'select_qrcode' @transitionTo 'select_qrcode'
events: -> events: ->
@@ -0,0 +1,18 @@
@import foundation_and_overrides
.form-row
@extend .row
.form-label
@media #{$small-only}
+grid-column($columns:10, $center:true)
@media #{$medium-only}
+grid-column($columns:4, $offset:1)
@media #{$large-up}
+grid-column(3)
.form-field
@media #{$small-only}
+grid-column($columns:10, $center:true, $last-column:true)
@media #{$medium-only}
+grid-column($columns:4, $last-column:true)
@media #{$large-up}
+grid-column($columns: 3, $last-column:true)
+17
View File
@@ -267,6 +267,23 @@ class UserController < Users::ApplicationController
end end
end end
def obtain_token
redirect_to user_omniauth_authorize_path('facebook') and return unless current_user.present?
respond_to do |format|
format.html { render layout: 'user/obtain_token' }
format.json do
render json: json_response(ok: false, status: 401) and return unless params[:user].present? && params[:user][:email].present? && params[:user][:password].present?
user = User.find_by_email(params[:user][:email])
render json: json_response(ok: false, status: 401) and return unless user
render json: json_response(ok: false, status: 401) and return unless user.valid_password?(params[:user][:password])
user.ensure_authentication_token
sign_in user
render json: json_response(ok: true, auth_token: user.authentication_token, user_id: user.id)
end
end
end
def move_table def move_table
render json: json_alert('messages.no_active_list', list_active: false) and return unless list.present? render json: json_alert('messages.no_active_list', list_active: false) and return unless list.present?
render json: json_alert('messages.table_not_found') and return unless params[:table_id].present? render json: json_alert('messages.table_not_found') and return unless params[:table_id].present?
@@ -20,23 +20,6 @@ module Users
end end
end end
def obtain_token
redirect_to user_omniauth_authorize_path('facebook') and return unless current_user.present?
respond_to do |format|
format.html
format.json do
render json: json_response(ok: false, status: 401) and return unless params[:user].present? && params[:user][:email].present? && params[:user][:password].present?
user = User.find_by_email(params[:user][:email])
render json: json_response(ok: false, status: 401) and return unless user
render json: json_response(ok: false, status: 401) and return unless user.valid_password?(params[:user][:password])
user.ensure_authentication_token
sign_in user
render json: json_response(ok: true, auth_token: user.authentication_token, user_id: user.id)
end
end
end
def handle_message_params def handle_message_params
flash.now[:notice] = t('messages.the_list_has_been_closed', list: List.model_name.human) if params[:list_closed].present? flash.now[:notice] = t('messages.the_list_has_been_closed', list: List.model_name.human) if params[:list_closed].present?
flash.now[:notice] = t("messages.#{params[:message]}", list: List.model_name.human, supplier: Supplier.model_name.human) if params[:message].present? && params[:message] =~ /^\w+$/ flash.now[:notice] = t("messages.#{params[:message]}", list: List.model_name.human, supplier: Supplier.model_name.human) if params[:message].present? && params[:message] =~ /^\w+$/
+10 -2
View File
@@ -24,8 +24,16 @@ module ApplicationHelper
def user_dynamic_data_host def user_dynamic_data_host
case Rails.env case Rails.env
when 'test' then "data_host = 'http://#{request.host}:#{request.port}';".html_safe when 'test' then "$data_host = data_host = 'http://#{request.host}:#{request.port}';".html_safe
when 'development' then "data_host = 'http://localhost:3000';".html_safe when 'development' then "$data_host = data_host = 'http://localhost:3000';".html_safe
else ''
end
end
def user_dynamic_root_url
case Rails.env
when 'test' then "$root_url = 'http://#{request.host}:#{request.port}/user';".html_safe
when 'development' then "$root_url = 'http://localhost:3000/user';".html_safe
else '' else ''
end end
end end
+8 -6
View File
@@ -7,22 +7,24 @@ html lang="en"
title Qwaiter title Qwaiter
= stylesheet_link_tag "user/foundation/application" = stylesheet_link_tag "user/foundation/application"
= javascript_include_tag "vendor/modernizr" = javascript_include_tag "vendor/modernizr"
/= javascript_include_tag 'http://connect.facebook.net/en_US/all.js'
= javascript_include_tag "user/flat/application" = javascript_include_tag "user/flat/application"
- if ENV['QWAITER_MOBILE_EXPORT'] == 'yes' - if ENV['QWAITER_MOBILE_EXPORT'] == 'yes'
javascript: javascript:
var QMobile, Qwaiter, Quser; var QMobile, Qwaiter, Quser;
var data_host = 'http://data.qwaiter.com'; var $data_host = 'http://data.qwaiter.com';
var event_host = '#{Qwaiter.event_host}'; var $event_host = '#{Qwaiter.event_host}';
var $asset_path = '##assets_path##'; var $asset_path = '##assets_path##';
var Qstorage = localStorage; var Qstorage = localStorage;
var $root_url = 'http://www.qwaiter.com/user';
- else - else
javascript: javascript:
var QMobile, Qwaiter, Quser; var QMobile, Qwaiter, Quser;
var data_host = 'http://data.qwaiter.com'; var $event_host = '#{Qwaiter.event_host}';
var event_host = '#{Qwaiter.event_host}';
var $asset_path = '/assets/'; var $asset_path = '/assets/';
var Qstorage = localStorage; var Qstorage = localStorage;
#{user_dynamic_data_host} #{user_dynamic_data_host};
#{user_dynamic_root_url};
QMobile || (QMobile = { QMobile || (QMobile = {
scanQr: function(){window.location = '/select_qrcode'}, scanQr: function(){window.location = '/select_qrcode'},
activateRotation: function(){}, activateRotation: function(){},
@@ -35,7 +37,7 @@ html lang="en"
this.authentication_object_storage = '{"auth_token": "'+token+'"}' this.authentication_object_storage = '{"auth_token": "'+token+'"}'
}, },
root_url: function(){return 'file:///Users/bterkuile/Documents/workspace/Qwaiter/assets/user'}, root_url: function(){return 'file:///Users/bterkuile/Documents/workspace/Qwaiter/assets/user'},
root_url: function(){return '/user'}, $root_url: function(){return '/user'},
goHome: function(){ redirect_to('user_root')}, goHome: function(){ redirect_to('user_root')},
connection_problem: function(){alert('There is a problem connecting to the server')}, connection_problem: function(){alert('There is a problem connecting to the server')},
token: function(){return this.auth_token}, token: function(){return this.auth_token},
@@ -0,0 +1,13 @@
doctype html
html lang="en"
head
meta charset="utf-8"
meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"
meta name="viewport" content="width=device-width, initial-scale=1.0"
title Qwaiter
= stylesheet_link_tag "user/foundation/application"
= javascript_include_tag "vendor/modernizr"
javascript:
var Qstorage = localStorage;
body
= yield
+17 -16
View File
@@ -1,20 +1,21 @@
= top_bar title: 'obtain_token.title' do .row
span h1 data-t='obtain_token.title' = t('user.obtain_token.title')
hr
.well form
.alert.alert-warming.user-alert.hide .form-row
form.form-horizontal .form-label
.control-group label.control-label data-t='attributes.user.email' = User.human_attribute_name(:email)
label.control-label data-t='attributes.user.email' Email .form-field
.controls input#user-email.email type="email" placeholder=User.human_attribute_name(:email)
input#user-email.email type="email" placeholder="Email" .form-row
.control-group .form-label
label.control-label data-t='attributes.user.password' Password label.control-label data-t='attributes.user.password' Password
.controls .form-field
input#user-password.password type="password" placeholder="Password" input#user-password.password type="password" placeholder="Password"
.control-group .form-row
.controls .form-label
button.btn.btn-primary data-t="obtain_token.obtain" onclick="Quser.authenticate_user(); return false" .form-field
button.btn.btn-primary data-t="obtain_token.obtain" onclick="Quser.authenticate_user(); return false" = t('user.obtain_token.obtain')
- unless current_user.blank? || ENV['QWAITER_MOBILE_EXPORT']=='yes' - unless current_user.blank? || ENV['QWAITER_MOBILE_EXPORT']=='yes'
javascript: javascript:
Qstorage.setItem('auth_token', '#{current_user.authentication_token}'); Qstorage.setItem('auth_token', '#{current_user.authentication_token}');
+2 -1
View File
@@ -58,4 +58,5 @@ en:
from_number: From number from_number: From number
to_number: To number to_number: To number
created_at: Created created_at: Created
user:
email: 'E-mail'
+2
View File
@@ -59,3 +59,5 @@ nl:
from_number: Vanaf nummer from_number: Vanaf nummer
to_number: Tot nummer to_number: Tot nummer
created_at: Aangemaakt created_at: Aangemaakt
user:
email: 'E-mail'