2016-09-01 21:54:30 -04:00
|
|
|
|
define(['appSettings', 'dom', 'connectionManager', 'cardStyle', 'emby-checkbox'], function (appSettings, dom, connectionManager) {
|
2013-02-20 20:33:05 -05:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
function authenticateUserByName(page, apiClient, username, password) {
|
2016-06-19 12:53:53 -04:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
Dashboard.showLoadingMsg();
|
2016-06-19 12:53:53 -04:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
apiClient.authenticateUserByName(username, password).then(function (result) {
|
2016-06-19 12:53:53 -04:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
var user = result.User;
|
2016-06-19 12:53:53 -04:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
var serverId = getParameterByName('serverid');
|
2015-05-05 19:15:47 -04:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
var newUrl;
|
2016-06-18 13:26:42 -04:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
if (user.Policy.IsAdministrator && !serverId) {
|
|
|
|
|
newUrl = "dashboard.html";
|
|
|
|
|
} else {
|
|
|
|
|
newUrl = "home.html";
|
2015-12-14 10:43:03 -05:00
|
|
|
|
}
|
2014-02-23 22:27:13 -05:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
Dashboard.hideLoadingMsg();
|
2013-07-08 12:13:21 -04:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient);
|
|
|
|
|
Dashboard.navigate(newUrl);
|
2013-07-08 12:13:21 -04:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
}, function (response) {
|
2013-07-08 12:13:21 -04:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
page.querySelector('#txtManualName').value = '';
|
|
|
|
|
page.querySelector('#txtManualPassword').value = '';
|
2013-02-20 20:33:05 -05:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
Dashboard.hideLoadingMsg();
|
2013-02-20 20:33:05 -05:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
if (response.status == 401) {
|
|
|
|
|
require(['toast'], function (toast) {
|
|
|
|
|
toast(Globalize.translate('MessageInvalidUser'));
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
showServerConnectionFailure();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2013-07-15 21:36:18 -04:00
|
|
|
|
|
2016-06-14 15:21:26 -04:00
|
|
|
|
function showServerConnectionFailure() {
|
|
|
|
|
|
|
|
|
|
Dashboard.alert({
|
|
|
|
|
message: Globalize.translate("MessageUnableToConnectToServer"),
|
|
|
|
|
title: Globalize.translate("HeaderConnectionFailure")
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2016-05-17 13:44:17 -04:00
|
|
|
|
function showManualForm(context, showCancel, focusPassword) {
|
2016-06-18 13:26:42 -04:00
|
|
|
|
|
2016-08-20 02:58:35 -04:00
|
|
|
|
context.querySelector('.chkRememberLogin').checked = appSettings.enableAutoLogin();
|
|
|
|
|
|
2016-06-18 13:26:42 -04:00
|
|
|
|
context.querySelector('.manualLoginForm').classList.remove('hide');
|
|
|
|
|
context.querySelector('.visualLoginForm').classList.add('hide');
|
2013-02-20 20:33:05 -05:00
|
|
|
|
|
2016-05-17 13:44:17 -04:00
|
|
|
|
if (focusPassword) {
|
2016-06-18 13:26:42 -04:00
|
|
|
|
context.querySelector('#txtManualPassword').focus();
|
2016-05-17 13:44:17 -04:00
|
|
|
|
} else {
|
2016-06-18 13:26:42 -04:00
|
|
|
|
context.querySelector('#txtManualName').focus();
|
2016-05-17 13:44:17 -04:00
|
|
|
|
}
|
2013-07-30 21:35:23 -04:00
|
|
|
|
|
2016-05-17 13:44:17 -04:00
|
|
|
|
if (showCancel) {
|
2016-06-18 13:26:42 -04:00
|
|
|
|
context.querySelector('.btnCancel').classList.remove('hide');
|
2016-05-17 13:44:17 -04:00
|
|
|
|
} else {
|
2016-06-18 13:26:42 -04:00
|
|
|
|
context.querySelector('.btnCancel').classList.add('hide');
|
2016-05-17 13:44:17 -04:00
|
|
|
|
}
|
|
|
|
|
}
|
2013-02-20 20:33:05 -05:00
|
|
|
|
|
2016-07-30 14:37:38 -04:00
|
|
|
|
var metroColors = ["#6FBD45", "#4BB3DD", "#4164A5", "#E12026", "#800080", "#E1B222", "#008040", "#0094FF", "#FF00C7", "#FF870F", "#7F0037"];
|
|
|
|
|
|
|
|
|
|
function getRandomMetroColor() {
|
|
|
|
|
|
|
|
|
|
var index = Math.floor(Math.random() * (metroColors.length - 1));
|
|
|
|
|
|
|
|
|
|
return metroColors[index];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getMetroColor(str) {
|
|
|
|
|
|
|
|
|
|
if (str) {
|
|
|
|
|
var character = String(str.substr(0, 1).charCodeAt());
|
|
|
|
|
var sum = 0;
|
|
|
|
|
for (var i = 0; i < character.length; i++) {
|
|
|
|
|
sum += parseInt(character.charAt(i));
|
|
|
|
|
}
|
|
|
|
|
var index = String(sum).substr(-1);
|
|
|
|
|
|
|
|
|
|
return metroColors[index];
|
|
|
|
|
} else {
|
|
|
|
|
return getRandomMetroColor();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2016-05-17 13:44:17 -04:00
|
|
|
|
function loadUserList(context, apiClient, users) {
|
2013-02-20 20:33:05 -05:00
|
|
|
|
var html = "";
|
|
|
|
|
|
|
|
|
|
for (var i = 0, length = users.length; i < length; i++) {
|
|
|
|
|
var user = users[i];
|
|
|
|
|
|
2016-08-26 13:24:04 -04:00
|
|
|
|
html += '<div class="card squareCard scalableCard squareCard-scalable"><div class="cardBox cardBox-bottompadded visualCardBox">';
|
2013-02-20 20:33:05 -05:00
|
|
|
|
|
2016-08-24 02:13:15 -04:00
|
|
|
|
html += '<div class="cardScalable visualCardBox-cardScalable">';
|
2014-07-26 13:30:15 -04:00
|
|
|
|
|
2016-08-11 16:28:49 -04:00
|
|
|
|
html += '<div class="cardPadder cardPadder-square"></div>';
|
2014-07-26 13:30:15 -04:00
|
|
|
|
html += '<a class="cardContent" href="#" data-ajax="false" data-haspw="' + user.HasPassword + '" data-username="' + user.Name + '" data-userid="' + user.Id + '">';
|
2013-02-20 20:33:05 -05:00
|
|
|
|
|
2014-07-29 23:31:35 -04:00
|
|
|
|
var imgUrl;
|
|
|
|
|
|
2013-02-20 20:33:05 -05:00
|
|
|
|
if (user.PrimaryImageTag) {
|
|
|
|
|
|
2015-05-05 19:15:47 -04:00
|
|
|
|
imgUrl = apiClient.getUserImageUrl(user.Id, {
|
2014-07-26 13:30:15 -04:00
|
|
|
|
width: 300,
|
2013-02-22 09:28:35 -06:00
|
|
|
|
tag: user.PrimaryImageTag,
|
|
|
|
|
type: "Primary"
|
2013-02-20 20:33:05 -05:00
|
|
|
|
});
|
|
|
|
|
|
2016-08-20 02:27:48 -04:00
|
|
|
|
html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + '\');"></div>';
|
2013-04-25 19:28:01 -04:00
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
|
2016-07-30 14:37:38 -04:00
|
|
|
|
var background = getMetroColor(user.Id);
|
2013-04-25 19:28:01 -04:00
|
|
|
|
|
2014-07-29 23:31:35 -04:00
|
|
|
|
imgUrl = 'css/images/logindefault.png';
|
|
|
|
|
|
2016-08-20 02:27:48 -04:00
|
|
|
|
html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + '\');background-color:' + background + ';"></div>';
|
2013-02-20 20:33:05 -05:00
|
|
|
|
}
|
|
|
|
|
|
2014-07-26 13:30:15 -04:00
|
|
|
|
html += '</a>';
|
|
|
|
|
html += '</div>';
|
|
|
|
|
|
2016-08-23 13:07:50 -04:00
|
|
|
|
html += '<div class="cardFooter visualCardBox-cardFooter">';
|
2016-10-02 00:31:47 -04:00
|
|
|
|
html += '<div class="cardText singleCardText">' + user.Name + '</div>';
|
2013-04-25 19:28:01 -04:00
|
|
|
|
|
2014-07-26 13:30:15 -04:00
|
|
|
|
html += '</div>';
|
|
|
|
|
html += '</div>';
|
2013-02-20 20:33:05 -05:00
|
|
|
|
|
2014-07-26 13:30:15 -04:00
|
|
|
|
html += '</div>';
|
2013-02-20 20:33:05 -05:00
|
|
|
|
}
|
|
|
|
|
|
2016-06-18 13:26:42 -04:00
|
|
|
|
context.querySelector('#divUsers').innerHTML = html;
|
|
|
|
|
}
|
2014-07-07 21:41:03 -04:00
|
|
|
|
|
2016-05-17 13:44:17 -04:00
|
|
|
|
return function (view, params) {
|
2013-07-08 12:13:21 -04:00
|
|
|
|
|
2016-05-17 13:44:17 -04:00
|
|
|
|
var self = this;
|
2015-08-29 14:07:02 -04:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
function getApiClient() {
|
|
|
|
|
|
|
|
|
|
var serverId = params.serverid;
|
|
|
|
|
|
|
|
|
|
if (serverId) {
|
|
|
|
|
return connectionManager.getOrCreateApiClient(serverId);
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
return ApiClient;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function showVisualForm() {
|
|
|
|
|
|
|
|
|
|
view.querySelector('.visualLoginForm').classList.remove('hide');
|
|
|
|
|
view.querySelector('.manualLoginForm').classList.add('hide');
|
|
|
|
|
}
|
|
|
|
|
|
2016-07-30 14:37:38 -04:00
|
|
|
|
view.querySelector('#divUsers').addEventListener('click', function (e) {
|
2016-09-01 21:54:30 -04:00
|
|
|
|
var cardContent = dom.parentWithClass(e.target, 'cardContent');
|
2016-06-18 13:26:42 -04:00
|
|
|
|
|
|
|
|
|
if (cardContent) {
|
|
|
|
|
|
|
|
|
|
var context = view;
|
|
|
|
|
var id = cardContent.getAttribute('data-userid');
|
|
|
|
|
var name = cardContent.getAttribute('data-username');
|
|
|
|
|
var haspw = cardContent.getAttribute('data-haspw');
|
|
|
|
|
|
|
|
|
|
if (id == 'manual') {
|
2016-07-12 13:17:15 -04:00
|
|
|
|
context.querySelector('#txtManualName').value = '';
|
2016-06-18 13:26:42 -04:00
|
|
|
|
showManualForm(context, true);
|
|
|
|
|
}
|
|
|
|
|
else if (haspw == 'false') {
|
2016-09-01 21:54:30 -04:00
|
|
|
|
authenticateUserByName(context, getApiClient(), name, '');
|
2016-06-18 13:26:42 -04:00
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
context.querySelector('#txtManualName').value = name;
|
|
|
|
|
context.querySelector('#txtManualPassword').value = '';
|
|
|
|
|
showManualForm(context, true, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
view.querySelector('.manualLoginForm').addEventListener('submit', function (e) {
|
2016-06-19 12:53:53 -04:00
|
|
|
|
|
2016-08-20 02:58:35 -04:00
|
|
|
|
appSettings.enableAutoLogin(view.querySelector('.chkRememberLogin').checked);
|
|
|
|
|
|
2016-06-19 12:53:53 -04:00
|
|
|
|
var apiClient = getApiClient();
|
2016-09-01 21:54:30 -04:00
|
|
|
|
authenticateUserByName(view, apiClient, view.querySelector('#txtManualName').value, view.querySelector('#txtManualPassword').value);
|
2016-06-18 13:26:42 -04:00
|
|
|
|
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
// Disable default form submission
|
|
|
|
|
return false;
|
|
|
|
|
});
|
2016-05-17 13:44:17 -04:00
|
|
|
|
|
|
|
|
|
view.querySelector('.btnForgotPassword').addEventListener('click', function () {
|
|
|
|
|
Dashboard.navigate('forgotpassword.html');
|
2015-05-05 19:15:47 -04:00
|
|
|
|
});
|
2013-02-20 20:33:05 -05:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
view.querySelector('.btnCancel').addEventListener('click', showVisualForm);
|
2016-05-17 13:44:17 -04:00
|
|
|
|
|
|
|
|
|
view.querySelector('.btnManual').addEventListener('click', function () {
|
2016-07-12 13:17:15 -04:00
|
|
|
|
view.querySelector('#txtManualName').value = '';
|
2016-05-17 13:44:17 -04:00
|
|
|
|
showManualForm(view, true);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
view.addEventListener('viewshow', function (e) {
|
|
|
|
|
Dashboard.showLoadingMsg();
|
|
|
|
|
|
2016-06-19 12:53:53 -04:00
|
|
|
|
var apiClient = getApiClient();
|
|
|
|
|
apiClient.getPublicUsers().then(function (users) {
|
2016-05-17 13:44:17 -04:00
|
|
|
|
|
2016-06-19 12:53:53 -04:00
|
|
|
|
if (!users.length) {
|
2016-05-17 13:44:17 -04:00
|
|
|
|
|
2016-07-12 13:17:15 -04:00
|
|
|
|
view.querySelector('#txtManualName').value = '';
|
2016-06-19 12:53:53 -04:00
|
|
|
|
showManualForm(view, false, false);
|
2015-05-19 15:15:40 -04:00
|
|
|
|
|
2016-06-19 12:53:53 -04:00
|
|
|
|
} else {
|
2015-05-19 15:15:40 -04:00
|
|
|
|
|
2016-09-01 21:54:30 -04:00
|
|
|
|
showVisualForm();
|
2016-06-19 12:53:53 -04:00
|
|
|
|
loadUserList(view, apiClient, users);
|
|
|
|
|
}
|
2015-06-16 00:52:01 -04:00
|
|
|
|
|
2016-06-19 12:53:53 -04:00
|
|
|
|
Dashboard.hideLoadingMsg();
|
|
|
|
|
});
|
2016-05-17 13:44:17 -04:00
|
|
|
|
|
2016-06-19 12:53:53 -04:00
|
|
|
|
apiClient.getJSON(apiClient.getUrl('Branding/Configuration')).then(function (options) {
|
2016-05-17 13:44:17 -04:00
|
|
|
|
|
2016-06-19 12:53:53 -04:00
|
|
|
|
view.querySelector('.disclaimer').innerHTML = options.LoginDisclaimer || '';
|
2016-05-17 13:44:17 -04:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (Dashboard.isConnectMode()) {
|
2016-06-18 13:26:42 -04:00
|
|
|
|
view.querySelector('.connectButtons').classList.remove('hide');
|
2016-05-17 13:44:17 -04:00
|
|
|
|
} else {
|
2016-06-18 13:26:42 -04:00
|
|
|
|
view.querySelector('.connectButtons').classList.add('hide');
|
2016-05-17 13:44:17 -04:00
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
});
|