class ExtAppRoleController extends HTMLElement{
#boot;
#roles;
#users;
#mappings;
#serviceurl;
#appid;
#loading = false;
constructor(){
super()
this.#boot = document.querySelector("d4s-boot-2")
this.#serviceurl = this.#boot.url
}
connectedCallback(){
this.#appid = this.getAttribute("appid")
if(!this.#loading){
this.#loading = true
this.loadData()
}
}
loadData(){
Promise.all([
this.loadEligibleUsers(), this.loadRoles()
]).then(()=>{
console.log("Done. Ui should be complete now")
}).catch(err=>alert(err))
}
loadEligibleUsers(){
const url = this.#serviceurl + `/admin/realms/d4science/clients/${this.#appid}/roles/eligible/users?briefRepresentation=true&max=-1&first=0`
return this.#boot.secureFetch(url).then(resp=>{
if(resp.ok){
return resp.json()
}else if(resp.status === 403){
throw "Fetching users: You are not allowed to manage roles for this application."
}else{
throw "Fetching users: Unspecified error"
}
}).then(json=>{
console.log("Fetched eligible users can show table")
this.#users = json
return loadMappings()
}).then(()=>{
console.log(this.#mappings)
})
}
loadRoles(){
const url = this.#serviceurl + `/admin/realms/d4science/clients/${this.#appid}/roles`
return this.#boot.secureFetch(url).then(resp=>{
if(resp.ok){
return resp.json()
}else if(resp.status === 403){
throw "Fetching roles: You are not allowed to manage roles for this application."
}else{
throw "Fetching roles: Unspecified error"
}
}).then(json=>{
this.#roles = json
console.log("Roles loaded, could draw header")
})
}
loadMappings(){
return Promise.all(
this.#users.forEach(u => {
const url = this.#serviceurl + `/admin/realms/d4science/users/${u.id}/clients/${this.#appid}/roles`
this.#boot.secureFetch(url).then(resp=>{
if(resp.ok){
return resp.json()
}else if(resp.status === 403){
throw "Fetching role mappings: You are not allowed to manage roles for this application."
}else{
throw "Fetching role mappings: Unspecified error"
}
}).then(json=>{
u.mappings = json
console.log(`Fetched mappings for user ${u.id} can update the proper table`)
})
})
)
}
}
window.customElements.define('d4s-extapp-role-manager', ExtAppRoleController);