var app = angular.module('autome', ['ui.router']); app.config(['$stateProvider', '$urlRouterProvider',function($stateProvider, $urlRouterProvider) { $stateProvider .state('home', { url: '/home', templateUrl: '/home.html', controller: 'MainCtrl', onEnter: ['$state', 'auth', function ($state, auth) { if (!auth.isLoggedIn()) { $state.go('login'); } }], resolve: { postPromise: ['arduino', function(arduino) { return arduino.getRCs(); }] } }) .state('login', { url: '/login', templateUrl: '/login.html', controller: 'AuthCtrl', onEnter: ['$state', 'auth', function ($state, auth) { if (auth.isLoggedIn()) { $state.go('home'); } }] }) .state('register', { url: '/register', templateUrl: '/register.html', controller: 'AuthCtrl', onEnter: ['$state', 'auth', function ($state, auth) { if (!auth.isLoggedIn()) { $state.go('home'); } }] }); $urlRouterProvider.otherwise('home'); }]); app.factory('auth', ['$http', '$window', function ($http, $window) { var auth = {}; auth.saveToken = function (token) { $window.localStorage['autohome-token'] = token; }; auth.getToken = function () { return $window.localStorage['autohome-token']; }; auth.isLoggedIn = function () { var token = auth.getToken(); if (token) { var payload = JSON.parse($window.atob(token.split('.')[1])); return payload.exp > Date.now() / 1000; } return false; }; auth.currentUser = function () { if (auth.isLoggedIn()) { var token = auth.getToken(); var payload = JSON.parse($window.atob(token.split('.')[1])); return payload.username; } }; auth.register = function (user) { return $http.post('/register', user, { headers: {Authorization: 'Bearer '+auth.getToken()} }).success(function (data) { auth.saveToken(data.token); }); }; auth.logIn = function (user) { return $http.post('/login', user).success(function (data) { auth.saveToken(data.token); }); }; auth.logOut = function () { $window.localStorage.removeItem('autohome-token'); }; return auth; }]); app.factory('arduino', ['$http', 'auth', function($http, auth){ var o = { RCs: [] }; o.getRCs = function ( ) { return $http.get('/getRCs',{ headers: {Authorization: 'Bearer '+auth.getToken()} }).success(function(data) { angular.copy(data, o.RCs); }); } o.sendRC = function (RC) { var code = (RC.state) ? RC.off_value : RC.on_value; return $http.post('/sendRC', {code}, { headers: {Authorization: 'Bearer '+auth.getToken()} }).success(function (data) { RC.state = (RC.state) ? false : true; }); } o.irTest = function ( ) { return $http.get('/irTest',{ headers: {Authorization: 'Bearer '+auth.getToken()} }); } return o; }]); app.controller('MainCtrl', [ '$scope', 'arduino', function ($scope, arduino){ $scope.RCs = arduino.RCs; $scope.sendRC = function(RC){ arduino.sendRC(RC); }; $scope.irTest = function(){ arduino.irTest(); }; }]); app.controller('AuthCtrl', [ '$scope', '$state', 'auth', function($scope, $state, auth){ $scope.user = {}; $scope.register = function(){ auth.register($scope.user).error(function(error){ $scope.error = error; }).then(function(){ $state.go('home'); }); }; $scope.logIn = function(){ auth.logIn($scope.user).error(function(error){ $scope.error = error; }).then(function(){ $state.go('home'); }); }; }]); app.controller('NavCtrl', [ '$scope', 'auth', function($scope, auth){ $scope.isLoggedIn = auth.isLoggedIn; $scope.currentUser = auth.currentUser; $scope.logOut = auth.logOut; }]);