angular.module('flashy', [ 'flashy.LoginController', 'flashy.RootController', 'flashy.FeedController', 'flashy.DeckController', 'flashy.ClassAddController', 'flashy.ClassDropController', 'flashy.RequestResetController', 'flashy.StudyController', 'flashy.UserService', 'flashy.FlashcardDirective', //'flashy.SelectDirective', // DOESNT WORK RN 'flashy.ResetPasswordController', 'flashy.VerifyEmailController', 'flashy.CardListController', 'flashy.HelpController', 'flashy.SettingsController', 'ngCookies']). config(function($stateProvider, $urlRouterProvider, $resourceProvider, $httpProvider, $locationProvider) { 'use strict'; $httpProvider.defaults.withCredentials = true; $httpProvider.defaults.xsrfCookieName = 'csrftoken'; $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; $resourceProvider.defaults.stripTrailingSlashes = false; var arrayMethods = Object.getOwnPropertyNames(Array.prototype); arrayMethods.forEach(attachArrayMethodsToNodeList); function attachArrayMethodsToNodeList(methodName) { if (methodName !== 'length') { NodeList.prototype[methodName] = Array.prototype[methodName]; } } $httpProvider.interceptors.push(function($q, $rootScope) { return { 'responseError': function(rejection) { // need a better redirect if (rejection.status >= 500) { console.log('got error'); console.log(rejection); $rootScope.$broadcast('server_error', rejection); } if (rejection.status == 403) { console.log(rejection); if (rejection.data && rejection.data.detail == 'Please verify your email before continuing') { UserService.showLockedMessage(); UserService.logout(); } } return $q.reject(rejection); } }; }); $locationProvider.html5Mode(true); $urlRouterProvider.otherwise('/404'); var auth_resolve = { authorize: function($q, $rootScope, $state, $stateParams, UserService) { console.log('do we need to authorize a user for', $rootScope.nextState.name); if (UserService.noAuthRequired($rootScope.nextState)) { console.log('no auth required for', $rootScope.nextState.name); return UserService.getUserData(); } console.log('resolving user before continuing for ' + $state.name); var redirectAsNeeded = function() { if (!UserService.isLoggedIn()) { console.log(UserService.getUserData()); console.log('making the user log in'); $state.go('login'); } if (!UserService.authorizedFor($rootScope.nextState, $rootScope.nextStateParams)) { console.log('user not authorized for ' + $rootScope.nextState.name); $state.go('addclass'); } }; if (UserService.isResolved()) return redirectAsNeeded(); return UserService.getUserData().then(redirectAsNeeded); } }; $stateProvider. state('login', { resolve: auth_resolve, url: '/login', templateUrl: 'templates/login.html', controller: 'LoginController' }). state('root', { resolve: auth_resolve, url: '', controller: 'RootController' }). state('feed', { resolve: auth_resolve, url: '/feed/{sectionId}', templateUrl: 'templates/feed.html', controller: 'FeedController' }). state('cardlist', { resolve: auth_resolve, url: '/cards/{sectionId}', templateUrl: 'templates/cardlist.html', controller: 'CardListController' }). state('addclass', { resolve: auth_resolve, url: '/addclass', templateUrl: 'templates/addclass.html', controller: 'ClassAddController' }). state('dropclass', { resolve: auth_resolve, url: '/settings/dropclass', templateUrl: 'templates/dropclass.html', controller: 'ClassDropController' }). state('deck', { resolve: auth_resolve, url: '/deck/{sectionId}', templateUrl: 'templates/deck.html', controller: 'DeckController' }). state('study', { resolve: auth_resolve, url: '/study', templateUrl: 'templates/study.html', controller: 'StudyController' }). state('flashcard', { resolve: auth_resolve, url: '/flashcard', templateUrl: 'templates/flashcard.html', controller: 'FlashcardController' }). state('settings', { resolve: auth_resolve, url: '/settings', templateUrl: 'templates/settings.html', controller: 'SettingsController' }). state('requestpasswordreset', { url: '/requestpasswordreset', templateUrl: 'templates/requestpasswordreset.html', controller: 'RequestResetController' }). state('resetpassword', { url: '/resetpassword/{uid}/{token}', templateUrl: 'templates/resetpassword.html', controller: 'ResetPasswordController' }). state('verifyemail', { url: '/verifyemail/{key}', templateUrl: 'templates/verifyemail.html', controller: 'VerifyEmailController' }). state('404', { url: '/404', template: "