in portal/js/global/page-controller.js [23:418]
function(ug, help, utility, $scope, $rootScope, $location, $routeParams, $q, $route, $log, $sce) {
var initScopeVariables = function() {
var menuItems = Usergrid.options.menuItems;
for(var i=0;i<menuItems.length;i++){
menuItems[i].pic = $sce.trustAsHtml( menuItems[i].pic);
if(menuItems[i].items) {
for (var j = 0; j < menuItems[i].items.length; j++) {
menuItems[i].items[j].pic = $sce.trustAsHtml( menuItems[i].items[j].pic);
}
}
}
$scope.menuItems = Usergrid.options.menuItems;
//$rootScope.urls()... will determine which URL should be used for a given environment
$scope.loadingText = 'Loading...';
$scope.use_sso = false;
$scope.newApp = {
name: ''
};
$scope.getPerm = '';
$scope.postPerm = '';
$scope.putPerm = '';
$scope.deletePerm = '';
$scope.usersTypeaheadValues = [];
$scope.groupsTypeaheadValues = [];
$scope.rolesTypeaheadValues = [];
$rootScope.sdkActive = false;
$rootScope.demoData = false;
$scope.queryStringApplied = false;
$rootScope.autoUpdateTimer = Usergrid.config ? Usergrid.config.autoUpdateTimer : 61;
$rootScope.requiresDeveloperKey = Usergrid.config ? Usergrid.config.client.requiresDeveloperKey : false;
$rootScope.loaded = $rootScope.activeUI = false;
for (var key in Usergrid.regex) {
$scope[key] = Usergrid.regex[key];
}
$scope.options = Usergrid.options;
var getQuery = function() {
var result = {}, queryString = location.search.slice(1),
re = /([^&=]+)=([^&]*)/g,
m;
while (m = re.exec(queryString)) {
result[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
}
return result;
};
$scope.queryString = getQuery();
};
initScopeVariables();
$rootScope.urls = function() {
var urls = ug.getUrls( $scope.queryString )
$scope.apiUrl = urls.apiUrl;
$scope.use_sso = urls.use_sso;
return urls;
};
//used in users
$rootScope.gotoPage = function(path) {
$location.path(path);
}
var notRegistration = function() {
return "/forgot-password" !== $location.path() && "/register" !== $location.path();
};
//called in ng-init on main index page (first method called at app startup and every main navigation)
var verifyUser = function() {
//avoid polluting our target route with login path
if ($location.path().slice(0, '/login'.length) !== '/login') {
$rootScope.currentPath = $location.path();
//show loading screen during verify process
// $location.path('/login/loading');
}
//first check to see if there is a token in the query string, if so, save it
if ($routeParams.access_token && $routeParams.admin_email && $routeParams.uuid) {
ug.set('token', $routeParams.access_token);
ug.set('email', $routeParams.admin_email);
ug.set('uuid', $routeParams.uuid);
$location.search('access_token', null);
$location.search('admin_email', null);
$location.search('uuid', null);
}
//use a promise so we can update afterwards in other UI areas
//next try to quick login
ug.checkAuthentication(true);
};
$scope.profile = function() {
if ($scope.use_sso) {
window.location = $rootScope.urls().PROFILE_URL + '?callback=' + encodeURIComponent($location.absUrl());
} else {
$location.path('/profile')
}
};
$rootScope.showModal = function(id) {
$('#' + id).modal('show')
};
$rootScope.hideModal = function(id) {
$('#' + id).modal('hide')
};
//adding this here for now
//todo - create a controller for usergrid functionality where all UG pages inherit
$scope.deleteEntities = function(collection, successBroadcast, errorMessage) {
collection.resetEntityPointer();
var entitiesToDelete = []
while (collection.hasNextEntity()) {
var entity = collection.getNextEntity();
var checked = entity.checked;
if (checked) {
entitiesToDelete.push(entity);
}
}
var count = 0,
success = false;
for (var i = 0; i < entitiesToDelete.length; i++) {
var entity = entitiesToDelete[i];
collection.destroyEntity(entity, function(err) {
count++;
if (err) {
$rootScope.$broadcast('alert', 'error', errorMessage);
$rootScope.$broadcast(successBroadcast + '-error', err);
} else {
success = true;
}
if (count === entitiesToDelete.length) {
success && $rootScope.$broadcast(successBroadcast);
$scope.applyScope();
}
});
}
};
$scope.selectAllEntities = function(list, that, varName, setValue) {
varName = varName || 'master';
var val = that[varName];
if (setValue == undefined) {
setValue = true;
}
if (setValue) {
that[varName] = val = !val;
}
list.forEach(function(entitiy) {
entitiy.checked = val;
});
};
$scope.createPermission = function(type, entity, path, permissions) {
//e.g.: "get,post,put:/mypermission"
// var path = $scope.path;
if (path.charAt(0) != '/') {
path = '/' + path;
}
var ops = "";
var s = "";
if (permissions.getPerm) {
ops = "get";
s = ",";
}
if (permissions.postPerm) {
ops = ops + s + "post";
s = ",";
}
if (permissions.putPerm) {
ops = ops + s + "put";
s = ",";
}
if (permissions.deletePerm) {
ops = ops + s + "delete";
s = ",";
}
var permission = ops + ":" + path;
return permission
};
$scope.formatDate = function(date) {
return new Date(date).toUTCString();
};
$scope.clearCheckbox = function(id) {
if ($('#' + id).attr('checked')) {
$('#' + id).click();
}
};
$scope.removeFirstSlash = function(path) {
return path.indexOf('/') === 0 ? path.substring(1, path.length) : path;
};
$scope.applyScope = function(cb) {
cb = typeof cb === 'function' ? cb : function() {};
if (!this.$$phase) {
return this.$apply(cb);
} else {
cb();
}
}
$scope.valueSelected = function(list) {
return list && (list.some(function(item) {
return item.checked;
}));
};
$scope.sendHelp = function(modalId) {
ug.jsonpRaw('apigeeuihelpemail', '', {
useremail: $rootScope.userEmail
}).then(
function() {
$rootScope.$broadcast('alert', 'success', 'Email sent. Our team will be in touch with you shortly.');
},
function() {
$rootScope.$broadcast('alert', 'error', 'Problem Sending Email. Try sending an email to mobile@apigee.com.');
}
);
$scope.hideModal(modalId);
};
$scope.$on('users-typeahead-received', function(event, users) {
$scope.usersTypeaheadValues = users;
if (!$scope.$$phase) {
$scope.$apply();
}
});
$scope.$on('groups-typeahead-received', function(event, groups) {
$scope.groupsTypeaheadValues = groups;
if (!$scope.$$phase) {
$scope.$apply();
}
});
$scope.$on('roles-typeahead-received', function(event, roles) {
$scope.rolesTypeaheadValues = roles;
if (!$scope.$$phase) {
$scope.$apply();
}
});
$scope.$on('checkAuthentication-success', function() {
sessionStorage.setItem('authenticateAttempts', 0);
//all is well - repopulate objects
$scope.loaded = true;
$rootScope.activeUI = true;
$scope.applyScope();
if (!$scope.queryStringApplied) {
$scope.queryStringApplied = true;
setTimeout(function() {
//if querystring exists then operate on it.
if ($scope.queryString.org) {
$rootScope.$broadcast('change-org', $scope.queryString.org);
}
}, 1000)
}
$rootScope.$broadcast('app-initialized');
});
$scope.$on('checkAuthentication-error', function(args, err, missingData, email) {
$scope.loaded = true;
if (err && !$scope.use_sso && notRegistration()) {
//there was an error on re-auth lite, immediately send to login
ug.logout();
$location.path('/login');
$scope.applyScope();
} else {
if (missingData && notRegistration()) {
if (!email && $scope.use_sso) {
window.location = $rootScope.urls().LOGIN_URL + '?callback=' + encodeURIComponent($location.absUrl().split('?')[0]);
return;
}
ug.reAuthenticate(email);
}
}
});
$scope.$on('reAuthenticate-success', function(args, err, data, user, organizations, applications) {
sessionStorage.setItem('authenticateAttempts', 0);
//the user is authenticated
$rootScope.$broadcast('loginSuccesful', user, organizations, applications);
$rootScope.$emit('loginSuccesful', user, organizations, applications);
$rootScope.$broadcast('checkAuthentication-success');
$scope.applyScope(function() {
$location.path('/org-overview');
})
});
var authenticateAttempts = parseInt(sessionStorage.getItem('authenticateAttempts') || 0);
$scope.$on('reAuthenticate-error', function() {
//user is not authenticated, send to SSO if enabled
if ($scope.use_sso) {
//go to sso
if (authenticateAttempts++ > 5) {
$rootScope.$broadcast('alert', 'error', 'There is an issue with authentication. Please contact support.');
return;
}
console.error('Failed to login via sso ' + authenticateAttempts);
sessionStorage.setItem('authenticateAttempts', authenticateAttempts);
window.location = $rootScope.urls().LOGIN_URL + '?callback=' + encodeURIComponent($location.absUrl().split('?')[0]);
} else {
//go to login page
if (notRegistration()) {
ug.logout();
$location.path('/login');
$scope.applyScope();
}
}
});
$scope.$on('loginSuccessful', function() {
$rootScope.activeUI = true;
});
$scope.$on('app-changed', function(args, oldVal, newVal, preventReload) {
if (newVal !== oldVal && !preventReload) {
$route.reload();
}
});
$scope.$on('org-changed', function(args, oldOrg, newOrg) {
ug.getApplications();
$route.reload();
});
$scope.$on('app-settings-received', function(evt, data) {});
$scope.$on('request-times-slow', function(evt, averageRequestTimes) {
$rootScope.$broadcast('alert', 'info', 'We are experiencing performance issues on our server. Please click Get Help for support if this continues.');
});
var lastPage = "";
//verify on every route change
$scope.$on('$routeChangeSuccess', function() {
//todo possibly do a date check here for token expiry
//so we don't call this on every nav change
verifyUser();
$scope.showDemoBar = $location.path().slice(0, '/performance'.length) === '/performance';
if (!$scope.showDemoBar) {
$rootScope.demoData = false;
}
setTimeout(function() {
lastPage = ""; //remove the double load event
}, 50);
var path = window.location.pathname.replace("index-debug.html", "");
lastPage = $location.path();
});
$scope.$on('applications-received', function(event, applications) {
$scope.applications = applications;
$scope.hasApplications = Object.keys(applications).length > 0;
});
//init app
ug.getAppSettings();
//first time user takes the tour
$rootScope.startFirstTimeUser = function() {
$rootScope.hideModal('introjs');
//for GA
$rootScope.help.introjs_StartEvent();
//call introjs start
$scope.startHelp();
}
$scope.$on('helpJsonLoaded', function() {
if ($rootScope.help.introjs_shouldLaunch == true) {
//for GA
$rootScope.help.introjs_StartEvent();
//call introjs start
$scope.startHelp();
$rootScope.help.introjs_shouldLaunch = false;
}
});
}