1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/controllers/auth/login.js

215 lines
8.5 KiB
JavaScript
Raw Normal View History

2020-01-22 03:29:52 +03:00
define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layoutManager", "browser", "cardStyle", "emby-checkbox"], function (appHost, appSettings, dom, connectionManager, loading, layoutManager, browser) {
2018-10-23 01:05:09 +03:00
"use strict";
var enableFocusTransform = !browser.slow && !browser.edge;
2018-10-23 01:05:09 +03:00
function authenticateUserByName(page, apiClient, username, password) {
2019-04-06 23:07:02 -07:00
loading.show();
2020-01-22 03:29:52 +03:00
apiClient.authenticateUserByName(username, password).then(function (result) {
2019-04-06 23:07:02 -07:00
var user = result.User;
var serverId = getParameterByName("serverid");
2020-01-22 03:29:52 +03:00
var newUrl;
if (user.Policy.IsAdministrator && !serverId) {
newUrl = "dashboard.html";
} else {
newUrl = "home.html";
}
2019-04-06 23:07:02 -07:00
loading.hide();
Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient);
Dashboard.navigate(newUrl);
2020-01-22 03:29:52 +03:00
}, function (response) {
2019-04-06 23:07:02 -07:00
page.querySelector("#txtManualName").value = "";
page.querySelector("#txtManualPassword").value = "";
loading.hide();
2020-01-22 03:29:52 +03:00
2019-04-06 23:07:02 -07:00
if (response.status === 401) {
2020-01-22 03:29:52 +03:00
require(["toast"], function (toast) {
2019-04-06 23:07:02 -07:00
toast(Globalize.translate("MessageInvalidUser"));
});
} else {
Dashboard.alert({
message: Globalize.translate("MessageUnableToConnectToServer"),
title: Globalize.translate("HeaderConnectionFailure")
});
}
});
2018-10-23 01:05:09 +03:00
}
function showManualForm(context, showCancel, focusPassword) {
2019-04-06 23:07:02 -07:00
context.querySelector(".chkRememberLogin").checked = appSettings.enableAutoLogin();
context.querySelector(".manualLoginForm").classList.remove("hide");
context.querySelector(".visualLoginForm").classList.add("hide");
2019-08-03 17:18:44 +03:00
context.querySelector(".btnManual").classList.add("hide");
2020-01-22 03:29:52 +03:00
if (focusPassword) {
context.querySelector("#txtManualPassword").focus();
} else {
context.querySelector("#txtManualName").focus();
}
if (showCancel) {
context.querySelector(".btnCancel").classList.remove("hide");
} else {
context.querySelector(".btnCancel").classList.add("hide");
}
2018-10-23 01:05:09 +03:00
}
2019-04-06 23:07:02 -07:00
var metroColors = ["#6FBD45", "#4BB3DD", "#4164A5", "#E12026", "#800080", "#E1B222", "#008040", "#0094FF", "#FF00C7", "#FF870F", "#7F0037"];
2018-10-23 01:05:09 +03:00
function getRandomMetroColor() {
var index = Math.floor(Math.random() * (metroColors.length - 1));
2019-04-06 23:07:02 -07:00
return metroColors[index];
2018-10-23 01:05:09 +03:00
}
function getMetroColor(str) {
if (str) {
2019-04-06 23:07:02 -07:00
var character = String(str.substr(0, 1).charCodeAt());
var sum = 0;
2020-01-22 03:29:52 +03:00
2019-04-06 23:07:02 -07:00
for (var i = 0; i < character.length; i++) {
sum += parseInt(character.charAt(i));
}
2020-01-22 03:29:52 +03:00
2018-10-23 01:05:09 +03:00
var index = String(sum).substr(-1);
2019-04-06 23:07:02 -07:00
return metroColors[index];
2018-10-23 01:05:09 +03:00
}
2020-01-22 03:29:52 +03:00
2019-04-06 23:07:02 -07:00
return getRandomMetroColor();
2018-10-23 01:05:09 +03:00
}
function loadUserList(context, apiClient, users) {
2019-04-06 23:07:02 -07:00
var html = "";
2020-01-22 03:29:52 +03:00
2019-04-06 23:07:02 -07:00
for (var i = 0; i < users.length; i++) {
2018-10-23 01:05:09 +03:00
var user = users[i];
// TODO move card creation code to Card component
var cssClass = "card squareCard scalableCard squareCard-scalable";
if (layoutManager.tv) {
cssClass += " show-focus";
if (enableFocusTransform) {
cssClass += " show-animation";
}
}
var cardBoxCssClass = "cardBox cardBox-bottompadded";
html += '<button type="button" class="' + cssClass + '">';
html += '<div class="' + cardBoxCssClass + '">';
2019-04-06 23:07:02 -07:00
html += '<div class="cardScalable">';
html += '<div class="cardPadder cardPadder-square"></div>';
html += '<div class="cardContent" data-haspw="' + user.HasPassword + '" data-username="' + user.Name + '" data-userid="' + user.Id + '">';
2018-10-23 01:05:09 +03:00
var imgUrl;
2020-01-22 03:29:52 +03:00
2019-04-06 23:07:02 -07:00
if (user.PrimaryImageTag) {
imgUrl = apiClient.getUserImageUrl(user.Id, {
width: 300,
tag: user.PrimaryImageTag,
type: "Primary"
});
html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');\"></div>";
} else {
2018-10-23 01:05:09 +03:00
var background = getMetroColor(user.Id);
imgUrl = "assets/img/avatar.png";
2019-04-06 23:07:02 -07:00
html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');background-color:" + background + ';"></div>';
2018-10-23 01:05:09 +03:00
}
2020-01-22 03:29:52 +03:00
2019-04-06 23:07:02 -07:00
html += "</div>";
html += "</div>";
html += '<div class="cardFooter visualCardBox-cardFooter">';
html += '<div class="cardText singleCardText cardTextCentered">' + user.Name + "</div>";
html += "</div>";
html += "</div>";
html += "</button>";
2018-10-23 01:05:09 +03:00
}
2020-01-22 03:29:52 +03:00
2019-04-06 23:07:02 -07:00
context.querySelector("#divUsers").innerHTML = html;
2018-10-23 01:05:09 +03:00
}
2019-04-06 23:07:02 -07:00
2020-01-22 03:29:52 +03:00
return function (view, params) {
2018-10-23 01:05:09 +03:00
function getApiClient() {
var serverId = params.serverid;
2020-01-22 03:29:52 +03:00
if (serverId) {
return connectionManager.getOrCreateApiClient(serverId);
}
return ApiClient;
2018-10-23 01:05:09 +03:00
}
function showVisualForm() {
2019-04-06 23:07:02 -07:00
view.querySelector(".visualLoginForm").classList.remove("hide");
view.querySelector(".manualLoginForm").classList.add("hide");
2019-08-03 17:18:44 +03:00
view.querySelector(".btnManual").classList.remove("hide");
2019-11-02 20:38:58 +03:00
require(["autoFocuser"], function (autoFocuser) {
autoFocuser.autoFocus(view);
});
2018-10-23 01:05:09 +03:00
}
2019-04-06 23:07:02 -07:00
2020-01-22 03:29:52 +03:00
view.querySelector("#divUsers").addEventListener("click", function (e) {
2019-04-06 23:07:02 -07:00
var card = dom.parentWithClass(e.target, "card");
var cardContent = card ? card.querySelector(".cardContent") : null;
2020-01-22 03:29:52 +03:00
2018-10-23 01:05:09 +03:00
if (cardContent) {
2019-04-06 23:07:02 -07:00
var context = view;
var id = cardContent.getAttribute("data-userid");
var name = cardContent.getAttribute("data-username");
var haspw = cardContent.getAttribute("data-haspw");
2020-01-22 03:29:52 +03:00
2019-04-06 23:07:02 -07:00
if (id === 'manual') {
context.querySelector("#txtManualName").value = "";
showManualForm(context, true);
} else if (haspw == 'false') {
authenticateUserByName(context, getApiClient(), name, "");
} else {
context.querySelector("#txtManualName").value = name;
context.querySelector("#txtManualPassword").value = "";
showManualForm(context, true, true);
}
2018-10-23 01:05:09 +03:00
}
2019-04-06 23:07:02 -07:00
});
2020-01-22 03:29:52 +03:00
view.querySelector(".manualLoginForm").addEventListener("submit", function (e) {
2018-10-23 01:05:09 +03:00
appSettings.enableAutoLogin(view.querySelector(".chkRememberLogin").checked);
var apiClient = getApiClient();
2019-04-06 23:07:02 -07:00
authenticateUserByName(view, apiClient, view.querySelector("#txtManualName").value, view.querySelector("#txtManualPassword").value);
e.preventDefault();
return false;
});
2020-01-22 03:29:52 +03:00
view.querySelector(".btnForgotPassword").addEventListener("click", function () {
2019-04-06 23:07:02 -07:00
Dashboard.navigate("forgotpassword.html");
});
view.querySelector(".btnCancel").addEventListener("click", showVisualForm);
2020-01-22 03:29:52 +03:00
view.querySelector(".btnManual").addEventListener("click", function () {
2019-04-06 23:07:02 -07:00
view.querySelector("#txtManualName").value = "";
showManualForm(view, true);
});
2020-01-22 03:29:52 +03:00
view.addEventListener("viewshow", function (e) {
2018-10-23 01:05:09 +03:00
loading.show();
2020-01-22 03:29:52 +03:00
if (!appHost.supports('multiserver')) {
view.querySelector(".btnSelectServer").classList.add("hide");
}
2020-01-22 03:29:52 +03:00
2018-10-23 01:05:09 +03:00
var apiClient = getApiClient();
2020-01-22 03:29:52 +03:00
apiClient.getPublicUsers().then(function (users) {
if (users.length) {
showVisualForm();
loadUserList(view, apiClient, users);
} else {
view.querySelector("#txtManualName").value = "";
showManualForm(view, false, false);
}
2020-01-22 03:29:52 +03:00
}).catch().then(function () {
loading.hide();
});
2020-01-22 03:29:52 +03:00
apiClient.getJSON(apiClient.getUrl("Branding/Configuration")).then(function (options) {
2019-04-06 23:07:02 -07:00
view.querySelector(".disclaimer").textContent = options.LoginDisclaimer || "";
});
});
2020-01-22 03:29:52 +03:00
};
2019-05-05 23:55:42 +02:00
});