diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 5540030..a9f6dc6 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -3,8 +3,21 @@ class ApplicationController < ActionController::Base # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception + after_filter :set_csrf_cookie_for_ng + + def set_csrf_cookie_for_ng + cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery? + end + rescue_from CanCan::AccessDenied do |exception| # flash[:error] = "Access denied!" redirect_to '/static_pages/not_allowed' end + + protected + + # In Rails 4.2 and above + def verified_request? + super || valid_authenticity_token?(session, request.headers['X-XSRF-TOKEN']) + end end diff --git a/app/views/api/tournament.jbuilder b/app/views/api/tournament.jbuilder index 3241efb..09fe7aa 100644 --- a/app/views/api/tournament.jbuilder +++ b/app/views/api/tournament.jbuilder @@ -1,7 +1,7 @@ json.cache! ["api_tournament", @tournament] do json.content(@tournament) - json.(@tournament, :id, :name, :address, :director, :director_email, :tournament_type, :created_at, :updated_at) + json.(@tournament, :id, :name, :address, :director, :director_email, :tournament_type, :created_at, :updated_at, :user_id) json.schools @tournament.schools do |school| json.name school.name @@ -28,8 +28,6 @@ json.cache! ["api_tournament", @tournament] do json.mats @tournament.mats do |mat| json.name mat.name json.unfinishedMatches mat.unfinishedMatches do |match| - json.w1 = match.w1 - json.w2 = match.w2 json.bout_number match.bout_number json.w1_name match.w1_name json.w2_name match.w2_name @@ -42,8 +40,6 @@ json.cache! ["api_tournament", @tournament] do json.w2_name match.w2_name json.weightClass match.weight.max json.round match.round - json.w1 = match.w1 - json.w2 = match.w2 end json.matches @tournament.matches do |match| @@ -52,7 +48,7 @@ json.cache! ["api_tournament", @tournament] do json.w2_name match.w2_name json.weightClass match.weight.max json.round match.round - json.w1 = match.w1 - json.w2 = match.w2 + json.w1 match.w1 + json.w2 match.w2 end end diff --git a/app/views/layouts/_cdn.html.erb b/app/views/layouts/_cdn.html.erb index 70538f0..f923e78 100644 --- a/app/views/layouts/_cdn.html.erb +++ b/app/views/layouts/_cdn.html.erb @@ -9,7 +9,7 @@ - + diff --git a/config/application.rb b/config/application.rb index d8037e7..786352b 100644 --- a/config/application.rb +++ b/config/application.rb @@ -30,6 +30,10 @@ module Wrestling config.active_job.queue_adapter = :delayed_job config.rails_lineman.lineman_project_location = "frontend" + + config.to_prepare do + DeviseController.respond_to :html, :json + end end diff --git a/frontend/app/js/app.js b/frontend/app/js/app.js index db68ef9..395e7c2 100644 --- a/frontend/app/js/app.js +++ b/frontend/app/js/app.js @@ -1,4 +1,4 @@ -var app = angular.module("wrestlingdev", ["ngRoute"]).run(function($rootScope) { +var app = angular.module("wrestlingdev", ["ngRoute","Devise"]).run(function($rootScope) { // adds some basic utilities to the $rootScope for debugging purposes $rootScope.log = function(thing) { console.log(thing); diff --git a/frontend/app/js/controllers/login-controller.js b/frontend/app/js/controllers/login-controller.js new file mode 100644 index 0000000..c316d8b --- /dev/null +++ b/frontend/app/js/controllers/login-controller.js @@ -0,0 +1,51 @@ +'use strict'; +app.controller("loginController", function($scope, $routeParams, Auth, $rootScope) { + $scope.credentials = { + email: '', + password: '' + }; + + var config = { + headers: { + 'X-HTTP-Method-Override': 'POST' + } + }; + + + $scope.login = function(){ + Auth.login($scope.credentials, config).then(function(user) { + console.log(user); // => {id: 1, ect: '...'} + $rootScope.user = user; + $rootScope.alertClass = "alert alert-success"; + $rootScope.alertMessage = "Logged in successfully"; + }, function(error) { + console.log(error); + $rootScope.alertClass = "alert alert-danger"; + $rootScope.alertMessage = "Username and/or password is incorrect"; + }); + }; + + $scope.logout = function(){ + Auth.logout(config).then(function(oldUser) { + // alert(oldUser.name + "you're signed out now."); + $rootScope.user = null; + $rootScope.alertClass = "alert alert-success"; + $rootScope.alertMessage = "Logged out successfully"; + }, function(error) { + // An error occurred logging out. + $rootScope.alertClass = "alert alert-danger"; + $rootScope.alertMessage = "There was an error logging out"; + }); + }; + + Auth.currentUser().then(function(user) { + // User was logged in, or Devise returned + // previously authenticated session. + $rootScope.user = user; + }, function(error) { + // unauthenticated error + $rootScope.user = null; + }); + + +}); \ No newline at end of file diff --git a/frontend/app/js/controllers/tournament-controller.js b/frontend/app/js/controllers/tournament-controller.js index 8c09a41..21816bd 100644 --- a/frontend/app/js/controllers/tournament-controller.js +++ b/frontend/app/js/controllers/tournament-controller.js @@ -1,7 +1,8 @@ 'use strict'; -app.controller("tournamentController", function($scope, tournamentsService, $routeParams, Wrestler) { +app.controller("tournamentController", function($scope, tournamentsService, $routeParams, Wrestler, Auth, $rootScope) { $scope.message = "Test message in scope."; + // $scope.tournamentData = "test"; tournamentsService.tournamentDetails($routeParams.id).then(function(data) { //this will execute when the @@ -9,7 +10,43 @@ app.controller("tournamentController", function($scope, tournamentsService, $rou $scope.tournament = data; }); + // refresh tournament data every 10 seconds + // setInterval(function(){ + // tournamentsService.tournamentDetails($routeParams.id).then(function(data) { + // //this will execute when the + // //AJAX call completes. + // $scope.tournament = data; + // }); + // }, 10000); + $scope.wrestler = Wrestler; + $scope.showSchools = false; + + $scope.toggleSchools = function(){ + $scope.showSchools = !$scope.showSchools; + }; + + $scope.showWeightSeeds = false; + + $scope.toggleWeightSeeds = function(){ + $scope.showWeightSeeds = !$scope.showWeightSeeds; + }; + + $scope.showBoutBoard = false; + + $scope.toggleBoutBoard = function(){ + $scope.showBoutBoard = !$scope.showBoutBoard; + }; + + $scope.isTournamentOwner = function(tournamentId,userId){ + if(userId == tournamentId){ + return true; + } else { + return false; + } + }; + + }); \ No newline at end of file diff --git a/frontend/app/js/models/wrestler.js b/frontend/app/js/models/wrestler.js index 4f45c5e..30c2c89 100644 --- a/frontend/app/js/models/wrestler.js +++ b/frontend/app/js/models/wrestler.js @@ -4,16 +4,15 @@ app.factory('Wrestler', function Wrestler(){ var vm = this; - vm.matches = function(matches,wrestler){ - var givenWrestler = wrestler; + vm.matches = function(wrestler,matches){ - console.log(givenWrestler.id); + console.log(matches); return _.filter(matches, function(match){ - return match.w1 == givenWrestler.id || match.w2 == givenWrestler.id; + return match.w1 == wrestler.id || match.w2 == wrestler.id; }); - } + }; return vm; }); \ No newline at end of file diff --git a/frontend/app/js/routes.js b/frontend/app/js/routes.js index 2c97620..194d2f6 100644 --- a/frontend/app/js/routes.js +++ b/frontend/app/js/routes.js @@ -40,5 +40,5 @@ app.config(['$routeProvider', '$locationProvider', function($routeProvider,$loca $routeProvider.otherwise({redirectTo: '/'}); //this give me normal routes instead of /#/ - $locationProvider.html5Mode(true); + // $locationProvider.html5Mode(true); }]); \ No newline at end of file diff --git a/frontend/app/js/services/auth-service.js b/frontend/app/js/services/auth-service.js deleted file mode 100644 index db0c7d9..0000000 --- a/frontend/app/js/services/auth-service.js +++ /dev/null @@ -1,49 +0,0 @@ -app.factory('AuthenticationService', - ['Base64', '$http', '$cookieStore', '$rootScope', '$timeout', - function (Base64, $http, $cookieStore, $rootScope, $timeout) { - var service = {}; - - service.Login = function (username, password, callback) { - - /* Dummy authentication for testing, uses $timeout to simulate api call - ----------------------------------------------*/ - // $timeout(function(){ - // var response = { success: username === 'test' && password === 'test' }; - // if(!response.success) { - // response.message = 'Username or password is incorrect'; - // } - // callback(response); - // }, 1000); - - - /* Use this for real authentication - ----------------------------------------------*/ - $http.post('/api/authenticate', { username: username, password: password }) - .success(function (response) { - callback(response); - }); - - }; - - service.SetCredentials = function (username, password) { - var authdata = Base64.encode(username + ':' + password); - - $rootScope.globals = { - currentUser: { - username: username, - authdata: authdata - } - }; - - $http.defaults.headers.common['Authorization'] = 'Basic ' + authdata; // jshint ignore:line - $cookieStore.put('globals', $rootScope.globals); - }; - - service.ClearCredentials = function () { - $rootScope.globals = {}; - $cookieStore.remove('globals'); - $http.defaults.headers.common.Authorization = 'Basic '; - }; - - return service; - }]); \ No newline at end of file diff --git a/frontend/app/js/services/tournaments-service.js b/frontend/app/js/services/tournaments-service.js index 0ac1a3f..36d2a02 100644 --- a/frontend/app/js/services/tournaments-service.js +++ b/frontend/app/js/services/tournaments-service.js @@ -37,8 +37,8 @@ function tournamentsService($http){ } function errorCallback(err){ - console.log("error log below"); - console.log(err); + // console.log("error log below"); + // console.log(err); return err; } diff --git a/frontend/app/pages/index.us b/frontend/app/pages/index.us index 8ed5e16..213c950 100644 --- a/frontend/app/pages/index.us +++ b/frontend/app/pages/index.us @@ -1,7 +1,7 @@
-If you would like to run a tournament, please click log in and then click sign up.
Address: {{ tournament.address }} @@ -22,16 +21,19 @@
| Name | Score | +Actions |
|---|---|---|
| {{ school.name }} | {{ school.score }} | +
Click weight class for seeds