ldap-rest 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/lib/authz/base.js +1 -1
  2. package/dist/lib/ldapFilter.js +1 -0
  3. package/dist/plugins/auth/auth.options.js +1 -1
  4. package/dist/plugins/auth/authzLinid1.js +1 -1
  5. package/dist/plugins/auth/authzScope.js +1 -1
  6. package/dist/plugins/auth/crowdsec.js +1 -1
  7. package/dist/plugins/auth/rateLimit.js +1 -1
  8. package/dist/plugins/auth/totp.js +1 -1
  9. package/dist/plugins/auth/trustedProxy.js +1 -1
  10. package/dist/plugins/ldap/bulkImport.js +1 -1
  11. package/dist/plugins/ldap/raw.js +1 -1
  12. package/dist/plugins/weblogs.js +1 -1
  13. package/dist/src/bin/index.d.ts +2 -2
  14. package/dist/src/browser/shared/utils/totp.d.ts +5 -1
  15. package/dist/src/lib/authz/base.d.ts +23 -9
  16. package/dist/src/lib/ldapFilter.d.ts +19 -0
  17. package/dist/src/plugins/auth/auth.options.d.ts +1 -0
  18. package/dist/src/plugins/auth/authzLinid1.d.ts +103 -9
  19. package/dist/src/plugins/auth/authzScope.d.ts +4 -0
  20. package/dist/src/plugins/auth/crowdsec.d.ts +7 -0
  21. package/dist/src/plugins/auth/rateLimit.d.ts +7 -0
  22. package/dist/src/plugins/auth/totp.d.ts +11 -0
  23. package/dist/src/plugins/auth/trustedProxy.d.ts +23 -0
  24. package/dist/src/plugins/ldap/bulkImport.d.ts +7 -0
  25. package/docs/client-development/schemas/README.md +8 -7
  26. package/docs/usage/configuration.md +8 -7
  27. package/docs/usage/plugins/auth/README.md +12 -12
  28. package/docs/usage/plugins/auth/authz-linid1.md +69 -0
  29. package/docs/usage/plugins/auth/authz-scope.md +14 -0
  30. package/docs/usage/plugins/auth/rate-limit.md +11 -6
  31. package/docs/usage/plugins/auth/totp.md +37 -17
  32. package/docs/usage/plugins/auth/trusted-proxy.md +9 -1
  33. package/docs/usage/upgrading.md +26 -1
  34. package/examples/web/totp-client.html +16 -9
  35. package/package.json +1 -1
  36. package/static/browser/ldap-unit-editor/LdapUnitEditor.js +2 -1
  37. package/static/browser/ldap-unit-editor/LdapUnitEditor.js.map +1 -1
  38. package/static/browser/ldap-unit-editor.esm.js +23 -1
  39. package/static/browser/ldap-unit-editor.esm.js.map +1 -1
  40. package/static/browser/ldap-unit-editor.js +23 -1
  41. package/static/browser/ldap-unit-editor.js.map +1 -1
  42. package/static/browser/ldap-unit-editor.min.js +1 -1
  43. package/static/browser/ldap-unit-editor.min.js.map +1 -1
  44. package/static/browser/shared/utils/totp.js +2 -1
  45. package/static/browser/shared/utils/totp.js.map +1 -1
  46. package/static/browser/shared.esm.js +2 -1
  47. package/static/browser/shared.esm.js.map +1 -1
  48. package/static/browser/shared.js +2 -1
  49. package/static/browser/shared.js.map +1 -1
  50. package/static/browser/shared.min.js +1 -1
  51. package/static/browser/shared.min.js.map +1 -1
  52. package/static/schemas/twake/groups.json +15 -0
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).MiniDmShared={})}(this,function(e){"use strict";function t(e){if(null==e)return"";const t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}function n(e){const t=e.replace(/([A-Z])/g," $1").replace(/_/g," ");return t.charAt(0).toUpperCase()+t.slice(1)}function r(e){return document.getElementById(e)}const o=new Map;function s(e,t){const n=e=>{let n=e;for(const[e,r]of Object.entries(t))n=n.replace(new RegExp(e,"g"),r);return n};return Array.isArray(e)?e.map(n):n(e)}function i(e,t="en"){if(null==e)return;if("string"==typeof e)return e||void 0;const n=t.split("-")[0].toLowerCase();for(const r of[t,n,"en"])if(e[r])return e[r];return Object.values(e).find(Boolean)}function a(e,t,r){if(r&&r[e])return r[e];const o={ou:"Unit Name",l:"Location",telephoneNumber:"Phone Number",facsimileTelephoneNumber:"Fax Number",postalAddress:"Postal Address",twakeDepartmentPath:"Department Path",twakeLocalAdminLink:"Local Administrators",twakeMailboxType:"Mailbox Type"};return o[e]?o[e]:n(e)}const l=e=>(Array.isArray(e)?e:[e]).filter(e=>!(e=>null==e||""===e)(e)),c=e=>l(e).map(String);async function d(e){const t=e.digits??6,n=e.step??30,r=Math.floor(Date.now()/1e3),o=Math.floor(r/n);return await async function(e,t,n){const r=function(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";let n=e.toUpperCase();for(;n.endsWith("=");)n=n.slice(0,-1);let r=0,o=0;const s=[];for(let e=0;e<n.length;e++){const i=t.indexOf(n[e]);if(-1===i)throw new Error(`Invalid Base32 character: ${n[e]}`);o=o<<5|i,r+=5,r>=8&&(s.push(o>>>r-8&255),r-=8)}return new Uint8Array(s)}(e),o=new Uint8Array(8);new DataView(o.buffer).setBigUint64(0,BigInt(t),!1);const s=await crypto.subtle.importKey("raw",r.buffer,{name:"HMAC",hash:"SHA-1"},!1,["sign"]),i=await crypto.subtle.sign("HMAC",s,o),a=new Uint8Array(i),l=15&a[a.length-1],c=((127&a[l])<<24|(255&a[l+1])<<16|(255&a[l+2])<<8|255&a[l+3])%Math.pow(10,n);return c.toString().padStart(n,"0")}(e.secret,o,t)}function u(e){return/^[A-Z2-7]+=*$/i.test(e)}class h{_eventListeners=[];_intervals=[];_isDestroyed=!1;addManagedEventListener(e,t,n,r){this._isDestroyed||(e.addEventListener(t,n,r),this._eventListeners.push({target:e,type:t,listener:n,options:r}))}addManagedInterval(e,t){const n=setInterval(e,t);return this._intervals.push(n),n}get isDestroyed(){return this._isDestroyed}destroy(){if(!this._isDestroyed){this._isDestroyed=!0;for(const{target:e,type:t,listener:n,options:r}of this._eventListeners)e.removeEventListener(t,n,r);this._eventListeners=[];for(const e of this._intervals)clearInterval(e);this._intervals=[]}}}class p extends h{overlay=null;options;constructor(e){if(super(),this.options=e,this.overlay=r(e.id),!this.overlay)throw new Error(`Modal overlay with id "${e.id}" not found`);this.attachEventListeners()}attachEventListeners(){if(!this.overlay)return;const e=this.overlay.querySelector(".close-button");e&&this.addManagedEventListener(e,"click",()=>this.close());const t=this.overlay.querySelector("[data-modal-cancel]");t&&this.addManagedEventListener(t,"click",()=>this.close()),this.addManagedEventListener(this.overlay,"click",e=>{e.target===this.overlay&&this.close()}),this.addManagedEventListener(document,"keydown",e=>{"Escape"===e.key&&this.isOpen()&&this.close()})}open(){this.overlay&&(this.overlay.classList.add("active"),document.body.style.overflow="hidden")}close(){this.overlay&&(this.overlay.classList.remove("active"),document.body.style.overflow="",this.options.onClose&&this.options.onClose())}destroy(){this.close(),super.destroy(),this.overlay=null}isOpen(){return this.overlay?.classList.contains("active")||!1}getFormElement(){return this.overlay?.querySelector("form")||null}resetForm(){const e=this.getFormElement();e&&e.reset()}setContent(e){const t=this.overlay?.querySelector("[data-modal-content]");t&&(t.innerHTML=e)}setTitle(e){const t=this.overlay?.querySelector(".modal-header h2");t&&(t.textContent=e)}static createModalHTML(e){const n=e.formId||`${e.id}-form`,r=e.submitLabel||"Submit";return`\n <div class="modal-overlay" id="${t(e.id)}">\n <div class="modal">\n <div class="modal-header">\n <h2>${t(e.title)}</h2>\n <button class="close-button" type="button">\n <span class="material-icons">close</span>\n </button>\n </div>\n <form id="${t(n)}">\n <div data-modal-content></div>\n <div class="modal-footer">\n <button type="button" class="secondary" data-modal-cancel>\n Cancel\n </button>\n <button type="submit" class="primary">${t(r)}</button>\n </div>\n </form>\n </div>\n </div>\n `}static create(e){const t=p.createModalHTML(e);return document.body.insertAdjacentHTML("beforeend",t),new p(e)}}class f{container=null;options;timeoutId=null;constructor(e){if(this.options={duration:5e3,dismissible:!0,...e},this.container=r(e.containerId),!this.container)throw new Error(`Status container with id "${e.containerId}" not found`)}show(e,n="info"){if(!this.container)return;null!==this.timeoutId&&(window.clearTimeout(this.timeoutId),this.timeoutId=null);const r={error:"error_outline",success:"check_circle",info:"info",warning:"warning"}[n]||"info";let o=`\n <div class="status-message ${t(n)}">\n <span class="material-icons">${r}</span>\n <span class="status-message-text">${t(e)}</span>\n `;if(this.options.dismissible&&(o+='\n <button class="status-message-close" type="button" aria-label="Close">\n <span class="material-icons">close</span>\n </button>\n '),o+="</div>",this.container.innerHTML=o,this.options.dismissible){const e=this.container.querySelector(".status-message-close");e&&e.addEventListener("click",()=>this.hide())}this.options.duration&&this.options.duration>0&&(this.timeoutId=window.setTimeout(()=>{this.hide()},this.options.duration))}error(e){this.show(e,"error")}success(e){this.show(e,"success")}info(e){this.show(e,"info")}warning(e){this.show(e,"warning")}hide(){this.container&&(this.container.innerHTML=""),null!==this.timeoutId&&(window.clearTimeout(this.timeoutId),this.timeoutId=null)}getContainer(){return this.container}}e.Modal=p,e.StatusMessage=f,e.THEMES={purple:{name:"Purple",primaryColor:"#6200ee",primaryColorDark:"#3700b3",gradientStart:"#667eea",gradientEnd:"#764ba2"},blue:{name:"Blue",primaryColor:"#185a9d",primaryColorDark:"#0d3a6b",gradientStart:"#43cea2",gradientEnd:"#185a9d"},pink:{name:"Pink",primaryColor:"#f5576c",primaryColorDark:"#d43d50",gradientStart:"#f093fb",gradientEnd:"#f5576c"},green:{name:"Green",primaryColor:"#00c853",primaryColorDark:"#009624",gradientStart:"#56ab2f",gradientEnd:"#a8e063"}},e.TotpAuthClient=class{config;constructor(e){if(this.config={secret:e.secret,digits:e.digits??6,step:e.step??30},!u(this.config.secret))throw new Error("Invalid Base32 secret")}async getCode(){return await d(this.config)}async getAuthHeader(){return`Bearer ${await this.getCode()}`}async fetch(e,t={}){const n=await this.getAuthHeader(),r=new Headers(t.headers);return r.set("Authorization",n),fetch(e,{...t,headers:r})}async get(e,t={}){return this.fetch(e,{...t,method:"GET"})}async post(e,t,n={}){const r=new Headers(n.headers);return t&&"object"==typeof t&&r.set("Content-Type","application/json"),this.fetch(e,{...n,method:"POST",headers:r,body:t?JSON.stringify(t):void 0})}async put(e,t,n={}){const r=new Headers(n.headers);return t&&"object"==typeof t&&r.set("Content-Type","application/json"),this.fetch(e,{...n,method:"PUT",headers:r,body:t?JSON.stringify(t):void 0})}async delete(e,t={}){return this.fetch(e,{...t,method:"DELETE"})}async patch(e,t,n={}){const r=new Headers(n.headers);return t&&"object"==typeof t&&r.set("Content-Type","application/json"),this.fetch(e,{...n,method:"PATCH",headers:r,body:t?JSON.stringify(t):void 0})}},e.changedAttributes=function(e,t){const n={};for(const[r,o]of Object.entries(t)){if("dn"===r)continue;const t=l(o),s=t.map(String).sort(),i=l(e?.[r]).map(String).sort();s.length===i.length&&s.every((e,t)=>e===i[t])||(n[r]=Array.isArray(o)?t:t.length?o:[])}return n},e.clearPointerOptionsCache=function(){o.clear()},e.collectPointerArrayValues=function(e){const t={};return e.querySelectorAll(".pointer-array-field").forEach(e=>{const n=e.getAttribute("data-field");if(!n)return;const r=e.querySelectorAll(".pointer-array-select"),o=Array.from(r).map(e=>e.value).filter(e=>e);o.length>0&&(t[n]=o)}),t},e.createElement=function(e,t={},n=[]){const r=document.createElement(e);for(const[e,n]of Object.entries(t))"className"===e?r.className=n:r.setAttribute(e,n);for(const e of n)"string"==typeof e?r.appendChild(document.createTextNode(e)):r.appendChild(e);return r},e.escapeHtml=t,e.generateFormField=async function(e,n,r){const o=a(e,0,r?.customLabels),s=n.required?"required":"",i=n.required?"required":"";let l="";if("pointer"===n.type){const a=n.branch?.[0];if(a&&r?.pointerOptionsLoader){const n=await r.pointerOptionsLoader(a);l=`\n <div class="form-group">\n <label for="${t(e)}" class="${t(i)}">${t(o)}</label>\n <select id="${t(e)}" name="${t(e)}" class="form-select" ${s}>\n <option value="">Select...</option>\n ${n.map(e=>`\n <option value="${t(e.dn)}">${t(e.label)}</option>\n `).join("")}\n </select>\n ${"twakeMailboxType"===e?'<div class="help-text">Select "mailingList" or "teamMailbox" to enable mail functionality</div>':""}\n </div>\n `}else l=`\n <div class="form-group">\n <label for="${t(e)}" class="${t(i)}">${t(o)}</label>\n <input type="text" id="${t(e)}" name="${t(e)}" ${s} />\n <div class="help-text">Enter DN (Distinguished Name)</div>\n </div>\n `}else if("array"===n.type&&"pointer"===n.items?.type){const r=n.items.branch?.[0];l=r?`\n <div class="form-group">\n <label class="${t(i)}">${t(o)}</label>\n <div class="array-field pointer-array-field" data-field="${t(e)}" data-branch="${t(r)}">\n <button type="button" class="btn btn-secondary add-pointer-item" data-field="${t(e)}">\n <span class="material-icons">add</span>\n Add ${t(o)}\n </button>\n </div>\n <input type="hidden" name="${t(e)}" id="${t(e)}-hidden" value="" />\n </div>\n `:`\n <div class="form-group">\n <label for="${t(e)}" class="${t(i)}">${t(o)}</label>\n <textarea id="${t(e)}" name="${t(e)}" ${s}></textarea>\n <div class="help-text">Enter one DN per line</div>\n </div>\n `}else if("array"===n.type&&"string"===n.items?.type)l=`\n <div class="form-group">\n <label for="${t(e)}" class="${t(i)}">${t(o)}</label>\n <textarea id="${t(e)}" name="${t(e)}" ${s}></textarea>\n <div class="help-text">Enter one value per line</div>\n </div>\n `;else if("number"===n.type||"integer"===n.type)l=`\n <div class="form-group">\n <label for="${t(e)}" class="${t(i)}">${t(o)}</label>\n <input type="number" id="${t(e)}" name="${t(e)}" ${s} />\n </div>\n `;else if("string"===n.type){const n=e.toLowerCase().includes("password")||e.toLowerCase().includes("pwd")?"password":e.toLowerCase().includes("mail")?"email":e.toLowerCase().includes("phone")||e.toLowerCase().includes("telephone")?"tel":"text";l=`\n <div class="form-group">\n <label for="${t(e)}" class="${t(i)}">${t(o)}</label>\n <input type="${t(n)}" id="${t(e)}" name="${t(e)}" ${s} />\n </div>\n `}return l},e.generateTotp=d,e.getElementByIdSafe=r,e.getFieldLabel=a,e.getOrganizationPath=async function(e,t){try{const n=await fetch(`${t}/api/v1/ldap/organizations/${encodeURIComponent(e)}`);if(!n.ok)return console.error("Failed to fetch organization:",n.status),e;const r=await n.json();if(r.twakeDepartmentPath){return Array.isArray(r.twakeDepartmentPath)?r.twakeDepartmentPath[0]:r.twakeDepartmentPath}if(r.ou){return Array.isArray(r.ou)?r.ou[0]:r.ou}return e}catch(t){return console.error("Failed to get organization info:",t),e}},e.getRemainingSeconds=function(e=30){return e-Math.floor(Date.now()/1e3)%e},e.groupSchemaFields=function(e,t){const n=new Map;for(const[r,o]of Object.entries(e)){if(o.fixed)continue;if("objectClass"===r)continue;const e=t?t(r,o):i(o.group)||"default";null!==e&&(n.has(e)||n.set(e,[]),n.get(e).push([r,o]))}return n},e.hasRole=function(e,t){const n=e?.role;return Array.isArray(n)?n.includes(t):n===t},e.isValidBase32=u,e.listChanges=function(e,t){const n=c(e),r=c(t);return{added:r.filter(e=>!n.includes(e)),removed:n.filter(e=>!r.includes(e))}},e.listValues=c,e.loadPointerOptions=async function(e,t,n=!0){if(n&&o.has(e))return o.get(e);try{const r=await t(e);return n&&o.set(e,r),r}catch(t){return console.error("Failed to load pointer options for branch:",e,t),[]}},e.loadSchema=async function(e){if("string"==typeof e){const t=await fetch(e);if(!t.ok)throw new Error(`Failed to load schema from ${e}`);return await t.json()}return e},e.localizedText=i,e.processFormData=function(e,t){const n={};for(const[t,r]of e)n[t]?(Array.isArray(n[t])||(n[t]=[n[t]]),n[t].push(r)):n[t]=r;for(const[e,r]of Object.entries(t))n[e]&&("array"===r.type&&"string"==typeof n[e]?n[e]=n[e].split("\n").map(e=>e.trim()).filter(e=>e.length>0):"number"!==r.type&&"integer"!==r.type||"string"!=typeof n[e]||(n[e]="integer"===r.type?parseInt(n[e],10):parseFloat(n[e])));const r={};for(const[e,t]of Object.entries(n))""!==t&&null!=t&&(Array.isArray(t)&&0===t.length||(r[e]=t));return r},e.querySelectorAllSafe=function(e,t=document){return t.querySelectorAll(e)},e.querySelectorSafe=function(e,t=document){return t.querySelector(e)},e.replacePlaceholders=s,e.replaceSchemaPlaceholders=function(e,t){const n=e=>"string"==typeof e?s(e,t):Array.isArray(e)?e.map(n):e&&"object"==typeof e?r(e):e,r=e=>{const t={};for(const[r,o]of Object.entries(e))t[r]=n(o);return t};return r(e)},e.setInnerHTML=function(e,t){e.innerHTML=t},e.showStatus=function(e,t,n="info",r=5e3){new f({containerId:e,duration:r}).show(t,n)},e.toTitleCase=n});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).MiniDmShared={})}(this,function(e){"use strict";function t(e){if(null==e)return"";const t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}function n(e){const t=e.replace(/([A-Z])/g," $1").replace(/_/g," ");return t.charAt(0).toUpperCase()+t.slice(1)}function r(e){return document.getElementById(e)}const o=new Map;function s(e,t){const n=e=>{let n=e;for(const[e,r]of Object.entries(t))n=n.replace(new RegExp(e,"g"),r);return n};return Array.isArray(e)?e.map(n):n(e)}function i(e,t="en"){if(null==e)return;if("string"==typeof e)return e||void 0;const n=t.split("-")[0].toLowerCase();for(const r of[t,n,"en"])if(e[r])return e[r];return Object.values(e).find(Boolean)}function a(e,t,r){if(r&&r[e])return r[e];const o={ou:"Unit Name",l:"Location",telephoneNumber:"Phone Number",facsimileTelephoneNumber:"Fax Number",postalAddress:"Postal Address",twakeDepartmentPath:"Department Path",twakeLocalAdminLink:"Local Administrators",twakeMailboxType:"Mailbox Type"};return o[e]?o[e]:n(e)}const l=e=>(Array.isArray(e)?e:[e]).filter(e=>!(e=>null==e||""===e)(e)),c=e=>l(e).map(String);async function d(e){const t=e.digits??6,n=e.step??30,r=Math.floor(Date.now()/1e3),o=Math.floor(r/n);return await async function(e,t,n){const r=function(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";let n=e.toUpperCase();for(;n.endsWith("=");)n=n.slice(0,-1);let r=0,o=0;const s=[];for(let e=0;e<n.length;e++){const i=t.indexOf(n[e]);if(-1===i)throw new Error(`Invalid Base32 character: ${n[e]}`);o=o<<5|i,r+=5,r>=8&&(s.push(o>>>r-8&255),r-=8)}return new Uint8Array(s)}(e),o=new Uint8Array(8);new DataView(o.buffer).setBigUint64(0,BigInt(t),!1);const s=await crypto.subtle.importKey("raw",r.buffer,{name:"HMAC",hash:"SHA-1"},!1,["sign"]),i=await crypto.subtle.sign("HMAC",s,o),a=new Uint8Array(i),l=15&a[a.length-1],c=((127&a[l])<<24|(255&a[l+1])<<16|(255&a[l+2])<<8|255&a[l+3])%Math.pow(10,n);return c.toString().padStart(n,"0")}(e.secret,o,t)}function u(e){return/^[A-Z2-7]+=*$/i.test(e)}class h{_eventListeners=[];_intervals=[];_isDestroyed=!1;addManagedEventListener(e,t,n,r){this._isDestroyed||(e.addEventListener(t,n,r),this._eventListeners.push({target:e,type:t,listener:n,options:r}))}addManagedInterval(e,t){const n=setInterval(e,t);return this._intervals.push(n),n}get isDestroyed(){return this._isDestroyed}destroy(){if(!this._isDestroyed){this._isDestroyed=!0;for(const{target:e,type:t,listener:n,options:r}of this._eventListeners)e.removeEventListener(t,n,r);this._eventListeners=[];for(const e of this._intervals)clearInterval(e);this._intervals=[]}}}class p extends h{overlay=null;options;constructor(e){if(super(),this.options=e,this.overlay=r(e.id),!this.overlay)throw new Error(`Modal overlay with id "${e.id}" not found`);this.attachEventListeners()}attachEventListeners(){if(!this.overlay)return;const e=this.overlay.querySelector(".close-button");e&&this.addManagedEventListener(e,"click",()=>this.close());const t=this.overlay.querySelector("[data-modal-cancel]");t&&this.addManagedEventListener(t,"click",()=>this.close()),this.addManagedEventListener(this.overlay,"click",e=>{e.target===this.overlay&&this.close()}),this.addManagedEventListener(document,"keydown",e=>{"Escape"===e.key&&this.isOpen()&&this.close()})}open(){this.overlay&&(this.overlay.classList.add("active"),document.body.style.overflow="hidden")}close(){this.overlay&&(this.overlay.classList.remove("active"),document.body.style.overflow="",this.options.onClose&&this.options.onClose())}destroy(){this.close(),super.destroy(),this.overlay=null}isOpen(){return this.overlay?.classList.contains("active")||!1}getFormElement(){return this.overlay?.querySelector("form")||null}resetForm(){const e=this.getFormElement();e&&e.reset()}setContent(e){const t=this.overlay?.querySelector("[data-modal-content]");t&&(t.innerHTML=e)}setTitle(e){const t=this.overlay?.querySelector(".modal-header h2");t&&(t.textContent=e)}static createModalHTML(e){const n=e.formId||`${e.id}-form`,r=e.submitLabel||"Submit";return`\n <div class="modal-overlay" id="${t(e.id)}">\n <div class="modal">\n <div class="modal-header">\n <h2>${t(e.title)}</h2>\n <button class="close-button" type="button">\n <span class="material-icons">close</span>\n </button>\n </div>\n <form id="${t(n)}">\n <div data-modal-content></div>\n <div class="modal-footer">\n <button type="button" class="secondary" data-modal-cancel>\n Cancel\n </button>\n <button type="submit" class="primary">${t(r)}</button>\n </div>\n </form>\n </div>\n </div>\n `}static create(e){const t=p.createModalHTML(e);return document.body.insertAdjacentHTML("beforeend",t),new p(e)}}class f{container=null;options;timeoutId=null;constructor(e){if(this.options={duration:5e3,dismissible:!0,...e},this.container=r(e.containerId),!this.container)throw new Error(`Status container with id "${e.containerId}" not found`)}show(e,n="info"){if(!this.container)return;null!==this.timeoutId&&(window.clearTimeout(this.timeoutId),this.timeoutId=null);const r={error:"error_outline",success:"check_circle",info:"info",warning:"warning"}[n]||"info";let o=`\n <div class="status-message ${t(n)}">\n <span class="material-icons">${r}</span>\n <span class="status-message-text">${t(e)}</span>\n `;if(this.options.dismissible&&(o+='\n <button class="status-message-close" type="button" aria-label="Close">\n <span class="material-icons">close</span>\n </button>\n '),o+="</div>",this.container.innerHTML=o,this.options.dismissible){const e=this.container.querySelector(".status-message-close");e&&e.addEventListener("click",()=>this.hide())}this.options.duration&&this.options.duration>0&&(this.timeoutId=window.setTimeout(()=>{this.hide()},this.options.duration))}error(e){this.show(e,"error")}success(e){this.show(e,"success")}info(e){this.show(e,"info")}warning(e){this.show(e,"warning")}hide(){this.container&&(this.container.innerHTML=""),null!==this.timeoutId&&(window.clearTimeout(this.timeoutId),this.timeoutId=null)}getContainer(){return this.container}}e.Modal=p,e.StatusMessage=f,e.THEMES={purple:{name:"Purple",primaryColor:"#6200ee",primaryColorDark:"#3700b3",gradientStart:"#667eea",gradientEnd:"#764ba2"},blue:{name:"Blue",primaryColor:"#185a9d",primaryColorDark:"#0d3a6b",gradientStart:"#43cea2",gradientEnd:"#185a9d"},pink:{name:"Pink",primaryColor:"#f5576c",primaryColorDark:"#d43d50",gradientStart:"#f093fb",gradientEnd:"#f5576c"},green:{name:"Green",primaryColor:"#00c853",primaryColorDark:"#009624",gradientStart:"#56ab2f",gradientEnd:"#a8e063"}},e.TotpAuthClient=class{config;constructor(e){if(this.config={secret:e.secret,user:e.user,digits:e.digits??6,step:e.step??30},!u(this.config.secret))throw new Error("Invalid Base32 secret")}async getCode(){return await d(this.config)}async getAuthHeader(){const e=await this.getCode();return`Bearer ${this.config.user}:${e}`}async fetch(e,t={}){const n=await this.getAuthHeader(),r=new Headers(t.headers);return r.set("Authorization",n),fetch(e,{...t,headers:r})}async get(e,t={}){return this.fetch(e,{...t,method:"GET"})}async post(e,t,n={}){const r=new Headers(n.headers);return t&&"object"==typeof t&&r.set("Content-Type","application/json"),this.fetch(e,{...n,method:"POST",headers:r,body:t?JSON.stringify(t):void 0})}async put(e,t,n={}){const r=new Headers(n.headers);return t&&"object"==typeof t&&r.set("Content-Type","application/json"),this.fetch(e,{...n,method:"PUT",headers:r,body:t?JSON.stringify(t):void 0})}async delete(e,t={}){return this.fetch(e,{...t,method:"DELETE"})}async patch(e,t,n={}){const r=new Headers(n.headers);return t&&"object"==typeof t&&r.set("Content-Type","application/json"),this.fetch(e,{...n,method:"PATCH",headers:r,body:t?JSON.stringify(t):void 0})}},e.changedAttributes=function(e,t){const n={};for(const[r,o]of Object.entries(t)){if("dn"===r)continue;const t=l(o),s=t.map(String).sort(),i=l(e?.[r]).map(String).sort();s.length===i.length&&s.every((e,t)=>e===i[t])||(n[r]=Array.isArray(o)?t:t.length?o:[])}return n},e.clearPointerOptionsCache=function(){o.clear()},e.collectPointerArrayValues=function(e){const t={};return e.querySelectorAll(".pointer-array-field").forEach(e=>{const n=e.getAttribute("data-field");if(!n)return;const r=e.querySelectorAll(".pointer-array-select"),o=Array.from(r).map(e=>e.value).filter(e=>e);o.length>0&&(t[n]=o)}),t},e.createElement=function(e,t={},n=[]){const r=document.createElement(e);for(const[e,n]of Object.entries(t))"className"===e?r.className=n:r.setAttribute(e,n);for(const e of n)"string"==typeof e?r.appendChild(document.createTextNode(e)):r.appendChild(e);return r},e.escapeHtml=t,e.generateFormField=async function(e,n,r){const o=a(e,0,r?.customLabels),s=n.required?"required":"",i=n.required?"required":"";let l="";if("pointer"===n.type){const a=n.branch?.[0];if(a&&r?.pointerOptionsLoader){const n=await r.pointerOptionsLoader(a);l=`\n <div class="form-group">\n <label for="${t(e)}" class="${t(i)}">${t(o)}</label>\n <select id="${t(e)}" name="${t(e)}" class="form-select" ${s}>\n <option value="">Select...</option>\n ${n.map(e=>`\n <option value="${t(e.dn)}">${t(e.label)}</option>\n `).join("")}\n </select>\n ${"twakeMailboxType"===e?'<div class="help-text">Select "mailingList" or "teamMailbox" to enable mail functionality</div>':""}\n </div>\n `}else l=`\n <div class="form-group">\n <label for="${t(e)}" class="${t(i)}">${t(o)}</label>\n <input type="text" id="${t(e)}" name="${t(e)}" ${s} />\n <div class="help-text">Enter DN (Distinguished Name)</div>\n </div>\n `}else if("array"===n.type&&"pointer"===n.items?.type){const r=n.items.branch?.[0];l=r?`\n <div class="form-group">\n <label class="${t(i)}">${t(o)}</label>\n <div class="array-field pointer-array-field" data-field="${t(e)}" data-branch="${t(r)}">\n <button type="button" class="btn btn-secondary add-pointer-item" data-field="${t(e)}">\n <span class="material-icons">add</span>\n Add ${t(o)}\n </button>\n </div>\n <input type="hidden" name="${t(e)}" id="${t(e)}-hidden" value="" />\n </div>\n `:`\n <div class="form-group">\n <label for="${t(e)}" class="${t(i)}">${t(o)}</label>\n <textarea id="${t(e)}" name="${t(e)}" ${s}></textarea>\n <div class="help-text">Enter one DN per line</div>\n </div>\n `}else if("array"===n.type&&"string"===n.items?.type)l=`\n <div class="form-group">\n <label for="${t(e)}" class="${t(i)}">${t(o)}</label>\n <textarea id="${t(e)}" name="${t(e)}" ${s}></textarea>\n <div class="help-text">Enter one value per line</div>\n </div>\n `;else if("number"===n.type||"integer"===n.type)l=`\n <div class="form-group">\n <label for="${t(e)}" class="${t(i)}">${t(o)}</label>\n <input type="number" id="${t(e)}" name="${t(e)}" ${s} />\n </div>\n `;else if("string"===n.type){const n=e.toLowerCase().includes("password")||e.toLowerCase().includes("pwd")?"password":e.toLowerCase().includes("mail")?"email":e.toLowerCase().includes("phone")||e.toLowerCase().includes("telephone")?"tel":"text";l=`\n <div class="form-group">\n <label for="${t(e)}" class="${t(i)}">${t(o)}</label>\n <input type="${t(n)}" id="${t(e)}" name="${t(e)}" ${s} />\n </div>\n `}return l},e.generateTotp=d,e.getElementByIdSafe=r,e.getFieldLabel=a,e.getOrganizationPath=async function(e,t){try{const n=await fetch(`${t}/api/v1/ldap/organizations/${encodeURIComponent(e)}`);if(!n.ok)return console.error("Failed to fetch organization:",n.status),e;const r=await n.json();if(r.twakeDepartmentPath){return Array.isArray(r.twakeDepartmentPath)?r.twakeDepartmentPath[0]:r.twakeDepartmentPath}if(r.ou){return Array.isArray(r.ou)?r.ou[0]:r.ou}return e}catch(t){return console.error("Failed to get organization info:",t),e}},e.getRemainingSeconds=function(e=30){return e-Math.floor(Date.now()/1e3)%e},e.groupSchemaFields=function(e,t){const n=new Map;for(const[r,o]of Object.entries(e)){if(o.fixed)continue;if("objectClass"===r)continue;const e=t?t(r,o):i(o.group)||"default";null!==e&&(n.has(e)||n.set(e,[]),n.get(e).push([r,o]))}return n},e.hasRole=function(e,t){const n=e?.role;return Array.isArray(n)?n.includes(t):n===t},e.isValidBase32=u,e.listChanges=function(e,t){const n=c(e),r=c(t);return{added:r.filter(e=>!n.includes(e)),removed:n.filter(e=>!r.includes(e))}},e.listValues=c,e.loadPointerOptions=async function(e,t,n=!0){if(n&&o.has(e))return o.get(e);try{const r=await t(e);return n&&o.set(e,r),r}catch(t){return console.error("Failed to load pointer options for branch:",e,t),[]}},e.loadSchema=async function(e){if("string"==typeof e){const t=await fetch(e);if(!t.ok)throw new Error(`Failed to load schema from ${e}`);return await t.json()}return e},e.localizedText=i,e.processFormData=function(e,t){const n={};for(const[t,r]of e)n[t]?(Array.isArray(n[t])||(n[t]=[n[t]]),n[t].push(r)):n[t]=r;for(const[e,r]of Object.entries(t))n[e]&&("array"===r.type&&"string"==typeof n[e]?n[e]=n[e].split("\n").map(e=>e.trim()).filter(e=>e.length>0):"number"!==r.type&&"integer"!==r.type||"string"!=typeof n[e]||(n[e]="integer"===r.type?parseInt(n[e],10):parseFloat(n[e])));const r={};for(const[e,t]of Object.entries(n))""!==t&&null!=t&&(Array.isArray(t)&&0===t.length||(r[e]=t));return r},e.querySelectorAllSafe=function(e,t=document){return t.querySelectorAll(e)},e.querySelectorSafe=function(e,t=document){return t.querySelector(e)},e.replacePlaceholders=s,e.replaceSchemaPlaceholders=function(e,t){const n=e=>"string"==typeof e?s(e,t):Array.isArray(e)?e.map(n):e&&"object"==typeof e?r(e):e,r=e=>{const t={};for(const[r,o]of Object.entries(e))t[r]=n(o);return t};return r(e)},e.setInnerHTML=function(e,t){e.innerHTML=t},e.showStatus=function(e,t,n="info",r=5e3){new f({containerId:e,duration:r}).show(t,n)},e.toTitleCase=n});
2
2
  //# sourceMappingURL=shared.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.min.js","sources":["../../../../src/browser/shared/utils/dom.ts","../../../../src/browser/shared/utils/schema.ts","../../../../src/browser/shared/utils/form.ts","../../../../src/browser/shared/utils/totp.ts","../../../../src/browser/shared/components/DisposableComponent.ts","../../../../src/browser/shared/components/Modal.ts","../../../../src/browser/shared/components/StatusMessage.ts","../../../../src/browser/shared/types/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["escapeHtml","text","map","String","replace","m","toTitleCase","label","charAt","toUpperCase","slice","getElementByIdSafe","id","document","getElementById","pointerOptionsCache","Map","replacePlaceholders","value","replacements","str","result","key","val","Object","entries","RegExp","Array","isArray","localizedText","language","undefined","primary","split","toLowerCase","values","find","Boolean","getFieldLabel","fieldName","attribute","customLabels","labelMap","ou","l","telephoneNumber","facsimileTelephoneNumber","postalAddress","twakeDepartmentPath","twakeLocalAdminLink","twakeMailboxType","valueList","filter","v","isEmpty","listValues","async","generateTotp","config","digits","step","now","Math","floor","Date","counter","secret","input","base32Chars","cleanInput","endsWith","bits","output","i","length","idx","indexOf","Error","push","Uint8Array","base32Decode","counterBytes","DataView","buffer","setBigUint64","BigInt","cryptoKey","crypto","subtle","importKey","name","hash","signature","sign","offset","code","pow","toString","padStart","generateTotpAtTime","isValidBase32","test","DisposableComponent","_eventListeners","_intervals","_isDestroyed","addManagedEventListener","target","type","listener","options","this","addEventListener","addManagedInterval","callback","ms","setInterval","isDestroyed","destroy","removeEventListener","clearInterval","Modal","overlay","constructor","super","attachEventListeners","closeBtn","querySelector","close","cancelBtn","e","isOpen","open","classList","add","body","style","overflow","remove","onClose","contains","getFormElement","resetForm","form","reset","setContent","html","contentEl","innerHTML","setTitle","title","titleEl","textContent","createModalHTML","formId","submitLabel","create","insertAdjacentHTML","StatusMessage","container","timeoutId","duration","dismissible","containerId","show","message","window","clearTimeout","icon","error","success","info","warning","hide","setTimeout","getContainer","purple","primaryColor","primaryColorDark","gradientStart","gradientEnd","blue","pink","green","getCode","getAuthHeader","fetch","url","authHeader","headers","Headers","set","get","method","post","JSON","stringify","put","patch","original","edited","after","a","sort","b","every","clear","querySelectorAll","forEach","field","getAttribute","selects","fieldValues","from","select","tag","attributes","children","element","createElement","className","setAttribute","child","appendChild","createTextNode","required","labelClass","fieldHtml","branch","pointerOptionsLoader","pointerOptions","opt","dn","join","items","includes","orgDn","apiBaseUrl","response","encodeURIComponent","ok","console","status","org","json","schema","categorizer","groups","fixed","category","group","has","attr","role","roles","before","was","is","added","removed","apiLoader","useCache","schemaSource","formData","data","line","trim","parseInt","parseFloat","cleanedData","selector","parent","processValue","processObject","obj"],"mappings":"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"}
1
+ {"version":3,"file":"shared.min.js","sources":["../../../../src/browser/shared/utils/dom.ts","../../../../src/browser/shared/utils/schema.ts","../../../../src/browser/shared/utils/form.ts","../../../../src/browser/shared/utils/totp.ts","../../../../src/browser/shared/components/DisposableComponent.ts","../../../../src/browser/shared/components/Modal.ts","../../../../src/browser/shared/components/StatusMessage.ts","../../../../src/browser/shared/types/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["escapeHtml","text","map","String","replace","m","toTitleCase","label","charAt","toUpperCase","slice","getElementByIdSafe","id","document","getElementById","pointerOptionsCache","Map","replacePlaceholders","value","replacements","str","result","key","val","Object","entries","RegExp","Array","isArray","localizedText","language","undefined","primary","split","toLowerCase","values","find","Boolean","getFieldLabel","fieldName","attribute","customLabels","labelMap","ou","l","telephoneNumber","facsimileTelephoneNumber","postalAddress","twakeDepartmentPath","twakeLocalAdminLink","twakeMailboxType","valueList","filter","v","isEmpty","listValues","async","generateTotp","config","digits","step","now","Math","floor","Date","counter","secret","input","base32Chars","cleanInput","endsWith","bits","output","i","length","idx","indexOf","Error","push","Uint8Array","base32Decode","counterBytes","DataView","buffer","setBigUint64","BigInt","cryptoKey","crypto","subtle","importKey","name","hash","signature","sign","offset","code","pow","toString","padStart","generateTotpAtTime","isValidBase32","test","DisposableComponent","_eventListeners","_intervals","_isDestroyed","addManagedEventListener","target","type","listener","options","this","addEventListener","addManagedInterval","callback","ms","setInterval","isDestroyed","destroy","removeEventListener","clearInterval","Modal","overlay","constructor","super","attachEventListeners","closeBtn","querySelector","close","cancelBtn","e","isOpen","open","classList","add","body","style","overflow","remove","onClose","contains","getFormElement","resetForm","form","reset","setContent","html","contentEl","innerHTML","setTitle","title","titleEl","textContent","createModalHTML","formId","submitLabel","create","insertAdjacentHTML","StatusMessage","container","timeoutId","duration","dismissible","containerId","show","message","window","clearTimeout","icon","error","success","info","warning","hide","setTimeout","getContainer","purple","primaryColor","primaryColorDark","gradientStart","gradientEnd","blue","pink","green","user","getCode","getAuthHeader","fetch","url","authHeader","headers","Headers","set","get","method","post","JSON","stringify","put","patch","original","edited","after","a","sort","b","every","clear","querySelectorAll","forEach","field","getAttribute","selects","fieldValues","from","select","tag","attributes","children","element","createElement","className","setAttribute","child","appendChild","createTextNode","required","labelClass","fieldHtml","branch","pointerOptionsLoader","pointerOptions","opt","dn","join","items","includes","orgDn","apiBaseUrl","response","encodeURIComponent","ok","console","status","org","json","schema","categorizer","groups","fixed","category","group","has","attr","role","roles","before","was","is","added","removed","apiLoader","useCache","schemaSource","formData","data","line","trim","parseInt","parseFloat","cleanedData","selector","parent","processValue","processObject","obj"],"mappings":"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"}
@@ -152,6 +152,21 @@
152
152
  },
153
153
  "referentialIntegrity": "remove"
154
154
  },
155
+ "twakeGroupAdminOrgLink": {
156
+ "type": "array",
157
+ "items": {
158
+ "type": "pointer",
159
+ "branch": ["__LDAP_BASE__"]
160
+ },
161
+ "referentialIntegrity": "remove",
162
+ "required": false,
163
+ "role": "groupAdminOrganizations",
164
+ "label": {
165
+ "en": "Delegated organizations",
166
+ "fr": "Organisations déléguées",
167
+ "mn": "Томилогдсон байгууллагууд"
168
+ }
169
+ },
155
170
  "twakeDepartmentLink": {
156
171
  "type": "pointer",
157
172
  "branch": ["__LDAP_BASE__"],