diff --git a/web/app/assets/javascripts/jam_rest.js b/web/app/assets/javascripts/jam_rest.js index 9b2235032..86e7c6344 100644 --- a/web/app/assets/javascripts/jam_rest.js +++ b/web/app/assets/javascripts/jam_rest.js @@ -189,6 +189,19 @@ }); } + function login(options) { + var url = '/api/auths/login'; + + return $.ajax({ + type: "POST", + dataType: "json", + url: url, + processData: false, + contentType: 'application/json', + data: JSON.stringify(options) + }); + } + function getUserDetail(options) { var id = getId(options); @@ -793,6 +806,7 @@ this.createBandInvitation = createBandInvitation; this.updateBandInvitation = updateBandInvitation; this.removeBandMember = removeBandMember; + this.login = login; return this; }; diff --git a/web/app/assets/javascripts/web/signinDialog.js b/web/app/assets/javascripts/web/signinDialog.js index aded10b15..5d1f4e989 100644 --- a/web/app/assets/javascripts/web/signinDialog.js +++ b/web/app/assets/javascripts/web/signinDialog.js @@ -9,16 +9,60 @@ var rest = context.JK.Rest(); var dialogId = '#signin-dialog'; + function reset() { + $(dialogId + ' #signin-form').removeClass('login-error') + + $(dialogId + ' input[name=email]').val(''); + $(dialogId + ' input[name=password]').val(''); + $(dialogId + ' input[name=remember_me]').attr('checked', 'checked') + } + + function login() { + var email = $(dialogId + ' input[name=email]').val(); + var password = $(dialogId + ' input[name=password]').val(); + var rememberMe = $(dialogId + ' input[name=remember_me]').is(':checked') + + rest.login({email: email, password: password, remember_me: rememberMe}) + .done(function() { + app.layout.closeDialog('signin-dialog') + window.location = '/client' + }) + .fail(function(jqXHR) { + if(jqXHR.status == 422) { + $(dialogId + ' #signin-form').addClass('login-error') + } + else { + app.notifyServerError(jqXHR, "Unable to log in") + } + }) + } + function events() { - $(dialogId + ' .signin-cancel').click(function(e) { - app.layout.closeDialog('signin-dialog'); - e.stopPropagation(); - return false; - }); + $(dialogId + ' .signin-cancel').click(function(e) { + app.layout.closeDialog('signin-dialog'); + e.stopPropagation(); + return false; + }); + + $(dialogId + ' #signin-form').submit(function(e) { + login(); + return false; + }); + + $(dialogId + ' .signin-submit').click(function(e) { + login(); + return false; + }); + + $(dialogId + ' .show-signup-dialog').click(function(e) { + app.layout.closeDialog('signin-dialog') + app.layout.showDialog('signup-dialog') + return false; + }) } function beforeShow() { - + reset(); } function afterHide() { diff --git a/web/app/assets/javascripts/web/signupDialog.js b/web/app/assets/javascripts/web/signupDialog.js index 2c85ac2f7..fc126cb57 100644 --- a/web/app/assets/javascripts/web/signupDialog.js +++ b/web/app/assets/javascripts/web/signupDialog.js @@ -15,6 +15,12 @@ e.stopPropagation(); return false; }); + + $(dialogId + ' .show-signin-dialog').click(function(e) { + app.layout.closeDialog('signup-dialog') + app.layout.showDialog('signin-dialog') + return false; + }) } function beforeShow() { diff --git a/web/app/assets/stylesheets/client/content.css.scss b/web/app/assets/stylesheets/client/content.css.scss index a7a4d6584..807a4ae93 100644 --- a/web/app/assets/stylesheets/client/content.css.scss +++ b/web/app/assets/stylesheets/client/content.css.scss @@ -190,13 +190,17 @@ font-size:24px; } -.content-wrapper select, .content-wrapper textarea, .content-wrapper input[type=text], .content-wrapper input[type=password], div.friendbox, .ftue-inner input[type=text], .ftue-inner input[type=password], .dialog-inner textarea, .dialog-inner input[type=text], .dialog-inner select { - font-family:"Raleway", arial, sans-serif; - background-color:#c5c5c5; - border:none; - -webkit-box-shadow: inset 2px 2px 3px 0px #888; - box-shadow: inset 2px 2px 3px 0px #888; - color:#666; +.content-wrapper, .dialog, .dialog-inner, .ftue-inner { + + select, textarea, input[type=text], input[type=password], div.friendbox { + font-family:"Raleway", arial, sans-serif; + background-color:#c5c5c5; + border:none; + -webkit-box-shadow: inset 2px 2px 3px 0px #888; + box-shadow: inset 2px 2px 3px 0px #888; + color:#666; + } + } .create-session-description { diff --git a/web/app/assets/stylesheets/client/user_dropdown.css.scss b/web/app/assets/stylesheets/client/user_dropdown.css.scss index 42e8081af..79096c8b8 100644 --- a/web/app/assets/stylesheets/client/user_dropdown.css.scss +++ b/web/app/assets/stylesheets/client/user_dropdown.css.scss @@ -9,7 +9,6 @@ #profile { float: right; height: 54px; - margin-top: 30px; text-align: right; ul { diff --git a/web/app/assets/stylesheets/users/signinDialog.css.scss b/web/app/assets/stylesheets/users/signinDialog.css.scss new file mode 100644 index 000000000..3bcb8cc63 --- /dev/null +++ b/web/app/assets/stylesheets/users/signinDialog.css.scss @@ -0,0 +1,56 @@ +#signin-dialog { + height:auto; +} + +#signin-dialog { + + div.field { + width:100%; + } + + div.overlay-inner { + height:auto; + } + + label { + margin-bottom:2px; + } + + div.email { + margin-top:5px; + } + + div.password { + margin-top:20px; + } + + div.actions { + margin-top:20px; + } + + .login-error { + background-color: #330000; + border: 1px solid #990000; + padding:4px; + + div.actions { + margin-top:10px; + } + } + + .login-error-msg { + display:none; + margin-top:10px; + text-align:center; + color:#F00; + font-size:11px; + } + + .login-error .login-error-msg { + display:block; + } + + input[type=text], input[type=password]{ + box-sizing: border-box; + } +} \ No newline at end of file diff --git a/web/app/assets/stylesheets/web/web.css b/web/app/assets/stylesheets/web/web.css index 98e7bd256..de27dc5bc 100644 --- a/web/app/assets/stylesheets/web/web.css +++ b/web/app/assets/stylesheets/web/web.css @@ -13,4 +13,5 @@ *= require web/recordings *= require web/welcome #= require web/sessions +*= require users/signinDialog */ \ No newline at end of file diff --git a/web/app/controllers/api_auths_controller.rb b/web/app/controllers/api_auths_controller.rb new file mode 100644 index 000000000..00001a7e4 --- /dev/null +++ b/web/app/controllers/api_auths_controller.rb @@ -0,0 +1,22 @@ +class ApiAuthsController < ApiController + + respond_to :json + + def login + user = User.authenticate(params[:email], params[:password]) + + if user.nil? + render :json => {}, :status => 422 + else + if jkclient_agent? + user.update_progression_field(:first_ran_client_at) + end + + @session_only_cookie = !jkclient_agent? && !params[:remember_me] + + sign_in user + + render :json => {}, :status => :ok + end + end +end diff --git a/web/app/controllers/api_sessions_controller.rb b/web/app/controllers/api_sessions_controller.rb new file mode 100644 index 000000000..b2f860747 --- /dev/null +++ b/web/app/controllers/api_sessions_controller.rb @@ -0,0 +1,20 @@ +class ApiSearchController < ApiController + + def login + user = User.authenticate(params[:email], params[:password]) + + if user.nil? + render :json => {}, :status => 422 + else + if jkclient_agent? + user.update_progression_field(:first_ran_client_at) + end + + @session_only_cookie = !jkclient_agent? && 0 == params[:remember_me].to_i + + sign_in user + + render :json => {}, :status => :ok + end + end +end diff --git a/web/app/controllers/clients_controller.rb b/web/app/controllers/clients_controller.rb index 009256e40..d8dde3f7a 100644 --- a/web/app/controllers/clients_controller.rb +++ b/web/app/controllers/clients_controller.rb @@ -35,7 +35,7 @@ class ClientsController < ApplicationController if current_user render :layout => 'client' else - redirect_to "/signin" + redirect_to root_url end end diff --git a/web/app/controllers/users_controller.rb b/web/app/controllers/users_controller.rb index 6c98a031d..770f3ca15 100644 --- a/web/app/controllers/users_controller.rb +++ b/web/app/controllers/users_controller.rb @@ -133,6 +133,8 @@ class UsersController < ApplicationController terms_of_service = params[:jam_ruby_user][:terms_of_service].nil? ? false : true musician = params[:jam_ruby_user][:musician] + puts "params: #{params.inspect}" + @user = UserManager.new.signup(remote_ip: request.remote_ip, first_name: params[:jam_ruby_user][:first_name], last_name: params[:jam_ruby_user][:last_name], diff --git a/web/app/views/users/_signinDialog.html.erb b/web/app/views/users/_signinDialog.html.erb index 9dc8df8a0..b14733178 100644 --- a/web/app/views/users/_signinDialog.html.erb +++ b/web/app/views/users/_signinDialog.html.erb @@ -8,7 +8,7 @@
+