diff --git a/SSO-Auth/Api/SSOController.cs b/SSO-Auth/Api/SSOController.cs index 81c197a..06f8964 100644 --- a/SSO-Auth/Api/SSOController.cs +++ b/SSO-Auth/Api/SSOController.cs @@ -145,7 +145,7 @@ public class SSOController : ControllerBase } if (StateManager[Request.Query["state"]].Valid) { - return Content(WebResponse.OIDGenerator(data: Request.Query["state"], provider: provider, baseUrl: GetRequestBase()), MediaTypeNames.Text.Html); + return Content(WebResponse.Generator(data: Request.Query["state"], provider: provider, baseUrl: GetRequestBase(), mode: "OID"), MediaTypeNames.Text.Html); } else { @@ -267,7 +267,7 @@ public class SSOController : ControllerBase // If no roles are configured, don't use RBAC if (config.Roles.Length == 0) { - return Content(WebResponse.SamlGenerator(data: Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(samlResponse.Xml)), provider: provider, baseUrl: GetRequestBase()), MediaTypeNames.Text.Html); + return Content(WebResponse.Generator(data: Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(samlResponse.Xml)), provider: provider, baseUrl: GetRequestBase(), mode: "SAML"), MediaTypeNames.Text.Html); } // Check if user is allowed to log in based on roles foreach (string role in samlResponse.GetCustomAttributes("Role")) @@ -276,7 +276,7 @@ public class SSOController : ControllerBase { if (allowedRole.Equals(role)) { - return Content(WebResponse.SamlGenerator(data: Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(samlResponse.Xml)), provider: provider, baseUrl: GetRequestBase()), MediaTypeNames.Text.Html); + return Content(WebResponse.Generator(data: Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(samlResponse.Xml)), provider: provider, baseUrl: GetRequestBase(), mode: "SAML"), MediaTypeNames.Text.Html); } } } diff --git a/SSO-Auth/WebResponse.cs b/SSO-Auth/WebResponse.cs index b0382d3..5a8f5d8 100644 --- a/SSO-Auth/WebResponse.cs +++ b/SSO-Auth/WebResponse.cs @@ -395,12 +395,12 @@ function getDeviceName() { "; - public static string OIDGenerator(string data, string provider, string baseUrl) + public static string Generator(string data, string provider, string baseUrl, string mode) { return Base + @" async function main() { var data = '" + data + @"'; - if (localStorage.getItem(""_deviceId2"") == null) { + if (localStorage.getItem(""_deviceId2"") == null || localStorage.getItem(""jellyfin_credentials"") == null) { // If localStorage isn't initialized yet, try again. setTimeout(main, 100); } else { @@ -412,60 +412,7 @@ async function main() { var request = {deviceId, appName, appVersion, deviceName, data, provider: '" + provider + @"'}; - var url = '" + baseUrl + @"/sso/OID/Auth'; - - let response = await new Promise(resolve => { - var xhr = new XMLHttpRequest(); - xhr.open('POST', url, true); - xhr.setRequestHeader('Content-Type', 'application/json'); - xhr.setRequestHeader('Accept', 'application/json'); - xhr.onload = function(e) { - resolve(xhr.response); - }; - xhr.onerror = function () { - resolve(undefined); - }; - xhr.send(JSON.stringify(request)); - }) - var responseJson = JSON.parse(response); - var userId = 'user-' + responseJson['User']['Id'] + '-' + responseJson['User']['ServerId']; - responseJson['User']['EnableAutoLogin'] = true; - localStorage.setItem(userId, JSON.stringify(responseJson['User'])); - var jfCreds = JSON.parse(localStorage.getItem('jellyfin_credentials')); - jfCreds['Servers'][0]['AccessToken'] = responseJson['AccessToken']; - jfCreds['Servers'][0]['UserId'] = responseJson['User']['Id']; - localStorage.setItem('jellyfin_credentials', JSON.stringify(jfCreds)); - localStorage.setItem('enableAutoLogin', 'true'); - window.location.replace('" + baseUrl + @"'); - } -} - -document.addEventListener('DOMContentLoaded', function () { - main(); -}); - -// https://stackoverflow.com/a/25435165 -"; - } - - public static string SamlGenerator(string data, string provider, string baseUrl) - { - return Base + @" -async function main() { - var data = '" + data + @"'; - if (localStorage.getItem(""_deviceId2"") == null) { - // If localStorage isn't initialized yet, try again. - setTimeout(main, 100); - } else { - var deviceId = localStorage.getItem(""_deviceId2""); - var appName = ""Jellyfin Web""; - var appVersion = ""10.8.0""; - var deviceName = getDeviceName(); - var provider = '" + provider + @"'; - - var request = {deviceId, appName, appVersion, deviceName, data, provider: '" + provider + @"'}; - - var url = '" + baseUrl + @"/sso/SAML/Auth'; + var url = '" + baseUrl + "/sso/" + mode + @"/Auth'; let response = await new Promise(resolve => { var xhr = new XMLHttpRequest();