1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/dashboard-ui/scripts/loginpage.js

228 lines
6.7 KiB
JavaScript
Raw Normal View History

2016-05-17 13:44:17 -04:00
define(['jQuery'], function ($) {
2013-02-20 20:33:05 -05:00
2016-05-17 13:44:17 -04:00
var LoginPage = {
2015-05-05 19:15:47 -04:00
2016-05-17 13:44:17 -04:00
showVisualForm: function (page) {
$('.visualLoginForm', page).show();
$('.manualLoginForm', page).hide();
},
2015-05-05 19:15:47 -04:00
2016-05-17 13:44:17 -04:00
getLastSeenText: function (lastActivityDate) {
2015-05-05 19:15:47 -04:00
2016-05-17 13:44:17 -04:00
if (!lastActivityDate) {
return "";
2015-12-14 10:43:03 -05:00
}
2014-02-23 22:27:13 -05:00
2016-05-17 13:44:17 -04:00
return "Last seen " + humane_date(lastActivityDate);
},
2013-02-20 20:33:05 -05:00
2016-05-17 13:44:17 -04:00
authenticateUserByName: function (page, apiClient, username, password) {
2014-02-23 22:27:13 -05:00
2016-05-17 13:44:17 -04:00
Dashboard.showLoadingMsg();
2013-07-08 12:13:21 -04:00
2016-05-17 13:44:17 -04:00
apiClient.authenticateUserByName(username, password).then(function (result) {
2013-07-08 12:13:21 -04:00
2016-05-17 13:44:17 -04:00
var user = result.User;
2013-07-08 12:13:21 -04:00
2016-05-17 13:44:17 -04:00
var serverId = getParameterByName('serverid');
2013-07-08 12:13:21 -04:00
2016-05-17 13:44:17 -04:00
var newUrl;
2013-07-08 12:13:21 -04:00
2016-05-17 13:44:17 -04:00
if (user.Policy.IsAdministrator && !serverId) {
newUrl = "dashboard.html";
2015-05-05 19:15:47 -04:00
} else {
2016-05-17 13:44:17 -04:00
newUrl = "home.html";
2015-05-05 19:15:47 -04:00
}
2015-05-05 19:15:47 -04:00
Dashboard.hideLoadingMsg();
2016-05-17 13:44:17 -04:00
Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient);
Dashboard.navigate(newUrl);
2014-07-07 21:41:03 -04:00
2016-05-17 13:44:17 -04:00
}, function () {
2016-05-17 13:44:17 -04:00
$('#pw', page).val('');
$('#txtManualName', page).val('');
$('#txtManualPassword', page).val('');
2016-05-17 13:44:17 -04:00
Dashboard.hideLoadingMsg();
2013-02-20 20:33:05 -05:00
2016-05-17 13:44:17 -04:00
setTimeout(function () {
require(['toast'], function (toast) {
toast(Globalize.translate('MessageInvalidUser'));
});
}, 300);
});
2013-02-20 20:33:05 -05:00
}
2016-05-17 13:44:17 -04:00
};
2013-07-15 21:36:18 -04:00
2016-05-17 13:44:17 -04:00
function getApiClient() {
2013-02-20 20:33:05 -05:00
2016-05-17 13:44:17 -04:00
var serverId = getParameterByName('serverid');
2013-07-08 12:13:21 -04:00
2016-05-17 13:44:17 -04:00
if (serverId) {
return Promise.resolve(ConnectionManager.getOrCreateApiClient(serverId));
2013-07-30 21:37:39 -04:00
2016-05-17 13:44:17 -04:00
} else {
return Promise.resolve(ApiClient);
}
}
2015-06-17 11:39:46 -04:00
2016-05-17 13:44:17 -04:00
function onManualSubmit() {
var page = $(this).parents('.page');
2015-05-17 21:27:48 -04:00
2016-05-17 13:44:17 -04:00
getApiClient().then(function (apiClient) {
LoginPage.authenticateUserByName(page, apiClient, $('#txtManualName', page).val(), $('#txtManualPassword', page).val());
});
2013-07-08 12:13:21 -04:00
2016-05-17 13:44:17 -04:00
// Disable default form submission
return false;
}
2013-07-30 21:37:39 -04:00
2016-05-17 13:44:17 -04:00
function showManualForm(context, showCancel, focusPassword) {
$('.visualLoginForm', context).hide();
$('.manualLoginForm', context).show();
2013-02-20 20:33:05 -05:00
2016-05-17 13:44:17 -04:00
if (focusPassword) {
2016-05-28 15:47:56 -04:00
$('#txtManualPassword', context).focus();
2016-05-17 13:44:17 -04:00
} else {
2016-05-28 15:47:56 -04:00
$('#txtManualName', context).focus();
2016-05-17 13:44:17 -04:00
}
2016-05-17 13:44:17 -04:00
if (showCancel) {
$('.btnCancel', context).show();
} else {
$('.btnCancel', context).hide();
}
}
2013-02-20 20:33:05 -05:00
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];
2015-10-15 13:21:18 -04:00
html += '<div class="card squareCard bottomPaddedCard"><div class="cardBox visualCardBox">';
2013-02-20 20:33:05 -05:00
2014-07-26 13:30:15 -04:00
html += '<div class="cardScalable">';
html += '<div class="cardPadder"></div>';
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,
tag: user.PrimaryImageTag,
type: "Primary"
2013-02-20 20:33:05 -05:00
});
2014-07-26 13:30:15 -04:00
html += '<div class="cardImage" style="background-image:url(\'' + imgUrl + '\');"></div>';
2013-04-25 19:28:01 -04:00
}
else {
var background = LibraryBrowser.getMetroColor(user.Id);
2014-07-29 23:31:35 -04:00
imgUrl = 'css/images/logindefault.png';
html += '<div class="cardImage" 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>';
html += '<div class="cardFooter">';
html += '<div class="cardText">' + user.Name + '</div>';
2013-04-25 19:28:01 -04:00
2014-07-26 13:30:15 -04:00
html += '<div class="cardText">';
var lastSeen = LoginPage.getLastSeenText(user.LastActivityDate);
if (lastSeen != "") {
html += lastSeen;
}
else {
html += "&nbsp;";
}
2013-02-20 20:33:05 -05:00
html += '</div>';
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-05-17 13:44:17 -04:00
var elem = $('#divUsers', context).html(html);
2014-07-07 21:41:03 -04:00
2014-07-26 13:30:15 -04:00
$('a', elem).on('click', function () {
2014-07-07 21:41:03 -04:00
2015-05-05 19:15:47 -04:00
var id = this.getAttribute('data-userid');
2014-07-07 21:41:03 -04:00
var name = this.getAttribute('data-username');
var haspw = this.getAttribute('data-haspw');
2013-02-20 20:33:05 -05:00
2015-05-05 19:15:47 -04:00
if (id == 'manual') {
2016-05-17 13:44:17 -04:00
showManualForm(context, true);
2015-05-05 19:15:47 -04:00
}
else if (haspw == 'false') {
2016-05-17 13:44:17 -04:00
LoginPage.authenticateUserByName(context, apiClient, name, '');
2014-07-07 21:41:03 -04:00
} else {
2016-05-17 13:44:17 -04:00
$('#txtManualName', context).val(name);
$('#txtManualPassword', context).val('');
showManualForm(context, true, true);
2014-07-07 21:41:03 -04:00
}
});
2016-05-17 13:44:17 -04:00
}
2013-02-20 20:33:05 -05: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-05-17 13:44:17 -04:00
$('.manualLoginForm', view).on('submit', onManualSubmit);
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-05-17 13:44:17 -04:00
view.querySelector('.btnCancel').addEventListener('click', function () {
LoginPage.showVisualForm(view);
});
view.querySelector('.btnManual').addEventListener('click', function () {
showManualForm(view, true);
});
view.addEventListener('viewshow', function (e) {
Dashboard.showLoadingMsg();
getApiClient().then(function (apiClient) {
apiClient.getPublicUsers().then(function (users) {
2016-05-23 19:41:01 -04:00
if (!users.length) {
2015-05-19 15:15:40 -04:00
2016-05-17 13:44:17 -04:00
showManualForm(view, false, false);
2015-05-19 15:15:40 -04:00
2016-05-17 13:44:17 -04:00
} else {
2015-05-19 15:15:40 -04:00
2016-05-17 13:44:17 -04:00
LoginPage.showVisualForm(view);
loadUserList(view, apiClient, users);
}
2015-06-16 00:52:01 -04:00
2016-05-17 13:44:17 -04:00
Dashboard.hideLoadingMsg();
});
apiClient.getJSON(apiClient.getUrl('Branding/Configuration')).then(function (options) {
$('.disclaimer', view).html(options.LoginDisclaimer || '');
});
});
if (Dashboard.isConnectMode()) {
$('.connectButtons', view).show();
} else {
$('.connectButtons', view).hide();
}
});
};
});