config.js 7.38 KB
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: "<h1>This page doesn't exist!</h1>"
}).
state('help', {
resolve: auth_resolve,
url: '/help',
templateUrl: 'templates/help.html',
controller: 'HelpController'
});
}).
run(function($rootScope, $state, $stateParams, $location, UserService) {
$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
console.log('failed to change state: ' + error);
$state.go('login');
});
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
$rootScope.nextState = toState;
$rootScope.nextStateParams = toParams;
console.log('changing state to', toState);
if (['feed', 'deck', 'cardlist'].indexOf(toState.name) >= 0) {
localStorage.setItem('last_state', toState.name);
localStorage.setItem('last_state_params', JSON.stringify(toParams));
}
});
});