146 lines
4.1 KiB
JavaScript
146 lines
4.1 KiB
JavaScript
const oidcConfigLinking = {
|
|
pluginUniqueId: "c2e83d4a-1a92-11f1-a789-f84d896c963f",
|
|
loadProviders: (view) => {
|
|
const provider_list_oidc = view.querySelector('#oidc-provider-list');
|
|
provider_list_oidc.innerHTML = "";
|
|
|
|
fetch(new Request(ApiClient.getUrl("oidc/GetNames"))).then((resp) => {
|
|
resp.json().then((config_names) => {
|
|
oidcConfigLinking.loadProviderList(provider_list_oidc, config_names);
|
|
});
|
|
});
|
|
},
|
|
loadProviderList: (container, providers) => {
|
|
providers.forEach((provider_name) => {
|
|
var provider_config = document.createElement("div");
|
|
provider_config.classList.add("oidc-provider-links-container");
|
|
provider_config.setAttribute("data-id", provider_name);
|
|
|
|
//TODO: fix links here
|
|
provider_config.innerHTML = `
|
|
<label class="inputLabel inputLabelUnfocused oidc-provider-link-title">
|
|
${provider_name}
|
|
</label>
|
|
<a class="fab emby-button oidc-provider" href="oidc/${provider_name}?isLinking=true">
|
|
<span class="material-icons add" aria-hidden="true"></span>
|
|
</a>
|
|
<div class="oidc-provider-existing-links-container" data-provider="${provider_name}">
|
|
</div>
|
|
`;
|
|
container.appendChild(provider_config);
|
|
});
|
|
|
|
const currentUserId = ApiClient.getCurrentUserId();
|
|
|
|
if (currentUserId) {
|
|
ApiClient.fetch(
|
|
{
|
|
type: "GET",
|
|
url: ApiClient.getUrl(`oidc/links/${currentUserId}`),
|
|
},
|
|
true,
|
|
).then((resp) => {
|
|
resp.json().then((provider_map) => {
|
|
console.log({ provider_map, currentUserId });
|
|
|
|
Object.keys(provider_map).forEach((provider_name) => {
|
|
const provider_container = container.querySelector(
|
|
`.oidc-provider-existing-links-container[data-provider="${provider_name}"]`,
|
|
);
|
|
oidcConfigLinking.populateExistingLinks(
|
|
provider_container,
|
|
provider_name,
|
|
provider_map[provider_name],
|
|
);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
},
|
|
|
|
populateExistingLinks: (container, provider_name, canonical_names) => {
|
|
container
|
|
.querySelectorAll(".oidc-provider-link-checkbox-wrapper")
|
|
.forEach((e) => e.remove());
|
|
|
|
const checkboxes = canonical_names.map((canonical_name) => {
|
|
var out = document.createElement("label");
|
|
out.classList.add("oidc-provider-link-checkbox-wrapper");
|
|
out.classList.add("checkbox-wrapper");
|
|
out.innerHTML = `
|
|
<input
|
|
is="emby-checkbox"
|
|
class="oidc-link-checkbox"
|
|
data-id="${canonical_name}"
|
|
data-provider="${provider_name}"
|
|
type="checkbox"
|
|
/>
|
|
<span class="checkbox-label">${canonical_name}</span>
|
|
`;
|
|
return out;
|
|
});
|
|
|
|
checkboxes.forEach((e) => {
|
|
container.appendChild(e);
|
|
});
|
|
},
|
|
|
|
handleDeleteButtonPressed: (evt, view) => {
|
|
if (evt.target.disabled) return;
|
|
|
|
const currentUserId = ApiClient.getCurrentUserId();
|
|
if (!currentUserId) return;
|
|
|
|
const delete_requests = [...view.querySelectorAll(".oidc-link-checkbox")]
|
|
.filter((checkbox_link) => {
|
|
const canonical_name = checkbox_link.getAttribute("data-id");
|
|
const provider_name = checkbox_link.getAttribute("data-provider");
|
|
|
|
if (![canonical_name, provider_name].every((e) => e)) {
|
|
return false;
|
|
}
|
|
|
|
if (!checkbox_link.checked) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
})
|
|
.map((checked_link) => {
|
|
const canonical_name = checked_link.getAttribute("data-id");
|
|
const provider_name = checked_link.getAttribute("data-provider");
|
|
|
|
return ApiClient.fetch({
|
|
type: "DELETE",
|
|
url: ApiClient.getUrl(
|
|
`oidc/link/${provider_name}/${currentUserId}/${canonical_name}`,
|
|
),
|
|
});
|
|
});
|
|
|
|
Promise.all(delete_requests).then((values) => {
|
|
console.log({ message: "Delete requests handled", values });
|
|
window.location.reload();
|
|
});
|
|
},
|
|
};
|
|
|
|
export default function (view) {
|
|
if (view.dataset.loaded === true) {
|
|
return;
|
|
}
|
|
view.dataset.loaded = true;
|
|
oidcConfigLinking.loadProviders(view);
|
|
|
|
view.querySelector("#enable-delete").addEventListener("change", (e) => {
|
|
const link = view.querySelector("#btn-delete-selected-links");
|
|
link.disabled = !e.target.checked;
|
|
});
|
|
|
|
view
|
|
.querySelector("#btn-delete-selected-links")
|
|
.addEventListener("click", (e) =>
|
|
oidcConfigLinking.handleDeleteButtonPressed(e, view),
|
|
);
|
|
}
|