/**
* @ngdoc inicio
* @name InicioCtrl
* @module s4c.components.inicio.InicioCtrl
*
* @description Controller da tela de login
*
*
*/
(function () {
'use strict';
/**
* @method InicioCtrl
*
* @param {*} $rootScope
* @param {*} $scope
* @param {*} $state
* @param {*} $http
* @param {*} API_ENDPOINT
* @param {*} $location
* @param {*} AuthService
* @param {*} $window
* @param {*} localize
* @param {*} $locale
* @param {*} $dtlocale
* @param {*} tmhDynamicLocale
* @param {*} amMoment
* @param {*} $interval
* @param {*} ParametrosS4C
* @param {*} $mdDialog
* @param {*} Base
* @param {*} $timeout
* @param {*} LocationService
* @param {*} MainState
*/
function InicioCtrl($rootScope, $scope, $state, $http, API_ENDPOINT,
$location, AuthService, $window, localize, $locale, $dtlocale, tmhDynamicLocale,
amMoment, $interval, ParametrosS4C, $mdDialog, Base, $timeout, LocationService, MainState) {
$scope.res = $rootScope.res;
$scope.displayLogin = false;
/**
* @method alterarIdioma
*
* @param {*} idioma
*/
function alterarIdioma(idioma) {
localize.setLanguage(idioma);
tmhDynamicLocale.set(localize.language).then(function () {
amMoment.changeLocale(localize.language);
var shortDate = $locale.DATETIME_FORMATS.shortDate;
shortDate = shortDate.replace(new RegExp('yy', 'g'), 'yyyy');
$locale.DATETIME_FORMATS.shortDate = shortDate;
var datetimepickerLang = _.find($dtlocale.i18n, function (dpt) {
return dpt.lang.toLowerCase() === $locale.id;
});
$locale.DATETIME_FORMATS.datetimepicker = datetimepickerLang ? datetimepickerLang : _.find($dtlocale.i18n, { lang: 'en' });
getCurrentWeather();
});
}
ParametrosS4C.downloadParametros()
.then(function (parametros) {
$rootScope.ParametrosS4C = parametros;
applyBackgroundImage();
});
/**
* @method applyBackgroundImage
*/
function applyBackgroundImage() {
angular.element('#wrapperInicio').css('background-image', 'url(' + $rootScope.ParametrosS4C.imagemInicial + ')');
}
/**
* @method openLoginModal
*/
function openLoginModal() {
Base.obter('ldap/authenticatedUser').then(function (response) {
if (response.s4c_mode_auth != null && response.s4c_mode_auth == "LDAP") {
$scope.isLdapAuthenticatedUser = true;
Base.obter('dominios/ldap').then(function (response) {
$scope.dominios = response;
$scope.displayLogin = !$scope.displayLogin;
$scope.isRemember = !$scope.displayLogin;
});
} else {
$scope.isLdapAuthenticatedUser = false;
}
});
}
//Retirando a chamada ao metodo ldap/authenticatedUser. Se não der problema, exclua ambas as linhas
//openLoginModal();
/**
* @method rememberModal
*/
function rememberModal() {
$scope.isRemember = !$scope.isRemember;
}
/**
* @method k2c
*
* @param {*} k
*/
function k2c(k) {
return Math.round(k - 273.15);
}
/**
* @method translateCondition
*
* @param {*} condition
*/
function translateCondition(condition) {
switch (condition) {
case 'Clouds':
return localize.getLocalizedString('TEMPO_NUBLADO');
case 'Mist':
return localize.getLocalizedString('TEMPO_PARCIALMENTENUBLADO');
case 'Rain':
return localize.getLocalizedString('TEMPO_CHUVA');
case 'Thunderstorm':
return localize.getLocalizedString('TEMPO_TROVOADA');
case 'Sun':
return localize.getLocalizedString('TEMPO_ENSOLARADO');
case 'Clear':
return localize.getLocalizedString('TEMPO_LIMPO');
}
}
/**
* @method getConditionIcon
*
* @param {*} condition
*/
function getConditionIcon(condition) {
var icon = '/assets/images/';
switch (condition) {
case 'Clouds':
return icon + 'ic_nublado_white_48px.svg';
case 'Mist':
return icon + 'ic_parcialmente_nublado_white_48px.svg';
case 'Rain':
return icon + 'ic_chuva_48px.svg';
case 'Thunderstorm':
return icon + 'ic_raios_white_48px.svg';
case 'Sun':
return icon + 'ic_ensolarado_48px.svg';
case 'Clear':
return icon + 'ic_ensolarado_48px.svg';
}
}
/**
* @method timestamp2string
* @param {*} timestamp
*/
function timestamp2string(timestamp) {
return moment.unix(timestamp).format('ddd - DD/MM/YYYY')
}
LocationService.getLocation();
/**
* @method getCurrentWeather
*/
function getCurrentWeather() {
$http({
method: 'GET',
url: '/externalServiceCaller',
params: { url: "http://api.openweathermap.org/data/2.5/forecast/daily?lat=" + LocationService.getLat() + "&lon=" + LocationService.getLon() + "&cnt=6&mode=json&APPID=9a05e591d36e51e747fb7f515186c6b0" }
}).then(function (response) {
adjustDate();
if (typeof response.data === 'object') {
if (response.data.list[0].temp.day) {
$scope.currentTemp = k2c(response.data.list[0].temp.day);
} else { }
$scope.currentCondition = translateCondition(response.data.list[0].weather[0].main);
$scope.currentConditionIcon = getConditionIcon(response.data.list[0].weather[0].main);
$scope.currentDateString = timestamp2string(response.data.list[0].dt);
return response.data;
}
}, function (response) {
});
}
/**
* @method getWeatherForecast
*/
function getWeatherForecast() {
$http({
method: 'GET',
url: '/externalServiceCaller',
params: { url: "http://api.openweathermap.org/data/2.5/forecast/daily?lat=" + LocationService.getLat() + "&lon=" + LocationService.getLon() + "&cnt=6&mode=json&APPID=9a05e591d36e51e747fb7f515186c6b0" }
}).then(function (response) {
adjustDate();
if (typeof response.data === 'object') {
$scope.weatherForecast = response.data.list;
return response.data;
}
});
}
$scope.isElectron = navigator.userAgent.indexOf("Electron") != -1;
$scope.reboot = function () {
MainState.reboot();
}
$scope.shutdown = function () {
MainState.shutdown();
}
$scope.license = false;
$scope.error = false;
$scope.license_message;
/**
* @method login
*/
function login() {
$scope.loading = true;
$scope.form_login = {};
$scope.form_login.username = $scope.user.username;
$scope.form_login.password = $scope.user.password;
$scope.form_login.primeiroLogin = $scope.user.primeiroLogin;
$scope.form_login.dominio = $scope.user.dominio;
AuthService.login($scope.user.username, $scope.user.password, $scope.user.primeiroLogin, $scope.user.dominio)
.then(function (token) {
adjustDate();
$rootScope.oauth = token;
$scope.loading = false;
$location.path('/');
}, function (error) {
$scope.loading = false;
if (error.data && error.data.status == 403) {
$scope.license = true;
$scope.license_message = $scope.res(error.data.message);
} else if (error.data && error.data.errorCode == 401 && error.data.messageError == 'userAlreadyAuthenticatedException') {
loginAgain();
/*
Base.salvar('logoutAll', $scope.form_login).then(function (rep) {
reLogin();
});
*/
} else {
$scope.error = true;
}
$scope.user.password = '';
});
}
/**
* @method loginAgain
*/
function loginAgain() {
var confirm = $mdDialog.confirm()
.title($scope.res('COMUM_AVISO'))
.content($scope.res('SESSAO_ATIVA'))
.ok($scope.res('COMUM_SIM'))
.cancel($scope.res('COMUM_CANCELAR'));
$mdDialog.show(confirm)
.then(function () {
Base.salvar('logoutAll', $scope.form_login).then(function (rep) {
reLogin();
});
}, function () {
console.log('cancel');
});
}
/**
* @method reLogin
*/
function reLogin() {
$scope.loading = true;
AuthService.login($scope.form_login.username, $scope.form_login.password, $scope.form_login.primeiroLogin, $scope.form_login.dominio)
.then(function (token) {
adjustDate();
$rootScope.oauth = token;
$location.path('/');
$scope.loading = false;
}, function (error) {
$scope.loading = false;
if (error.data.status == 403) {
$scope.license = true;
$scope.license_message = $scope.res(error.data.message);
} else {
$scope.error = true;
}
$scope.user.password = '';
});
}
/**
* @method adjustDate
*/
function adjustDate() {
Base.obter('date_server').then(function (response) {
var horario = moment(response, "DD/MM/YYYY HH:mm");
var then = moment();
$window.sessionStorage.setItem('diff_date', horario.diff(then));
moment.now = function () {
var diff_date = $window.sessionStorage.getItem('diff_date');
var m = moment(new Date());
m.add(diff_date, 'ms').hours();
return m;
};
});
}
/**
* @method rememberPassword
*/
function rememberPassword() {
if (($scope.user.username == null || $scope.user.username == '') && ($scope.user.email == null || $scope.user.email == '')) {
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content($scope.res('REMEMBER_PASSWORD_CAMPO_VAZIO'))
.ok($scope.res('COMUM_OK')));
return;
}
var _sucesso = true;
if ($scope.user.username != null && $scope.user.username.trim().length > 0) {
Base.obter('remember/user/username/' + $scope.user.username).then(function (data) {
if (data == null || data == "") {
_sucesso = false;
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content($scope.res('USUARIO_INATIVO'))
.ok($scope.res('COMUM_OK')));
return;
} else if (data != null && data.email != null) {
var objeto = {};
objeto.username = $scope.user.username;
Base.salvar('remember/password/', objeto).then(function (response) {
});
}
if (_sucesso) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_SUCESSO'))
.content($scope.res('REMEMBER_PASSWORD_TITLE'))
.ok($scope.res('COMUM_OK'))).then(function () {
rememberModal();
});
}
});
}
else if ($scope.user.email != null && $scope.user.email.trim().length > 0) {
var objeto_email = {};
objeto_email.email = $scope.user.email;
Base.salvar('remember/user/email/', objeto_email).then(function (data) {
if (data == null || data == "") {
_sucesso = false;
$mdDialog.show($mdDialog.alert()
.title($scope.res('COMUM_AVISO'))
.content($scope.res('USUARIO_INATIVO'))
.ok($scope.res('COMUM_OK')));
return;
} else if (data != null && data.email != null) {
var objeto = {};
objeto.email = $scope.user.email;
Base.salvar('remember/password/', objeto).then(function (response) {
});
}
if (_sucesso) {
$mdDialog
.show($mdDialog.alert()
.title($scope.res('COMUM_SUCESSO'))
.content($scope.res('REMEMBER_PASSWORD_TITLE'))
.ok($scope.res('COMUM_OK'))).then(function () {
rememberModal();
});
}
});
}
}
$scope.horario = moment().format('HH:mm');
$interval(function () {
$scope.horario = moment().format('HH:mm');
}, 1000);
angular.extend($scope, {
login: login,
user: {
error: false
},
getCurrentWeather: getCurrentWeather,
getWeatherForecast: getWeatherForecast,
k2c: k2c,
translateCondition: translateCondition,
getConditionIcon: getConditionIcon,
timestamp2string: timestamp2string,
openLoginModal: openLoginModal,
alterarIdioma: alterarIdioma,
rememberPassword: rememberPassword,
rememberModal: rememberModal
});
$timeout(function () {
getCurrentWeather();
getWeatherForecast();
}, 1500);
}
InicioCtrl.$inject = [
'$rootScope',
'$scope',
'$state',
'$http',
'API_ENDPOINT',
'$location',
'AuthService',
'$window',
'localize',
'$locale',
'$dtlocale',
'tmhDynamicLocale',
'amMoment',
'$interval',
'ParametrosS4C',
'$mdDialog',
'Base',
'$timeout',
'LocationService',
'MainState'
];
/**
* @method compareTo
*/
function compareTo() {
return {
require: "ngModel",
scope: {
otherModelValue: "=compareTo"
},
link: function (scope, element, attributes, ngModel) {
ngModel.$validators.compareTo = function (modelValue) {
return modelValue === scope.otherModelValue;
};
scope.$watch("otherModelValue", function () {
ngModel.$validate();
});
}
};
}
/**
* @method safePassword
*/
function safePassword() {
return {
require: "ngModel",
scope: {
username: '=username',
nome: '=nome'
},
link: function (scope, element, attributes, ngModel) {
/*
* Valid passwords:
* @a0Abcab
* 0@acanan
*/
// Retorno:
// true = tudo OK
ngModel.$validators.safePassword = function (modelValue) {
// Queremos que seja true:
var checkMinusculas = /(.*[a-z]){1,}/.test(modelValue);
var checkMaiusculas = /(.*[A-Z]){1,}/.test(modelValue);
var checkNumeros = /(.*[0-9]){1,}/.test(modelValue);
var checkCaracteres = /(.*[!@#$&*,.()%^]){1,}/.test(modelValue);
var checkName = true;
var checkUsername = true;
var checks = [
checkMinusculas,
checkMaiusculas,
checkNumeros,
checkCaracteres
].filter(function (check) {
return check;
});
if (modelValue !== undefined) {
var usernameTester = new RegExp(scope.username, 'i');
checkUsername = !usernameTester.test(modelValue.trim());
}
var nomeSobrenome = scope.nome.split(' ');
for (var i = 0; i < nomeSobrenome.length; i++) {
var nameTester = new RegExp(nomeSobrenome[i], 'i');
checkName = !nameTester.test(modelValue);
if (!checkName) {
break;
}
}
// Pelo menos cumpre 3 das regras
var valido = checks.length >= 3 &&
checkName && checkUsername;
/*checkMinusculas && checkMaiusculas &&
checkNumeros && checkCaracteres*/
return valido;
};
}
};
}
angular.module('s4c.controllers.InicioCtrl', ['s4c.services.AuthService'])
.controller('InicioCtrl', InicioCtrl)
.directive('compareTo', compareTo)
.directive('safePassword', safePassword);
}());