UNPKG

homebridge-config-ui-x

Version:

A web based management, configuration and control platform for Homebridge.

1 lines • 31.7 kB
import {p as pr}from'./chunk-vqqeWC6a.js';import {c as c$1}from'./chunk-CigU9JZR.js';import {y}from'./chunk-D9P3QF_y.js';import {d,c}from'./chunk-BWu8OGjA.js';import {g,ag as we,n as ne,X as I3,a as ae,Z as m,ah as si,cp as W,z as zt,a1 as M0,a2 as bf,W as W$1,A as An,E,ai as ty,J as Ja,av as fe,$,S as Se,v as ve,a4 as w,a5 as x,aH as X,al as M,aj as D,aV as St,K as Kn,Y as Ye$1,e as Hn,i as Jn,bs as mn,b_ as X$1,k as K8,m as La,s as At,t as f_,R as Rd,q as rc,o as dy,Q as KC,u as Re$1,y as ie,N as Ny,G as h_,a6 as vr,I as Rt,x as Cy,D as ly,T as JC,O as Oe$1,h as zt$1,d as zn,ba as Mt,L as Ln,C as Cn,_ as _n,aw as Qt,bo as xy,az as ke$1,aA as Je$1,aB as _i,aC as Dr,b1 as dT,bv as lT,b4 as fT,U as ye,bk as g_,bw as a_,a8 as nc,a9 as Go,aa as Wo,aD as bi}from'./main-ONDCASUV.js';function Pe(n,h){n&1&&(La(0,"ngb-alert",13)(1,"p",20),At(2),f_(3,"translate"),Rd()()),n&2&&(ly("dismissible",false),ie(2),Ny(h_(3,2,"login.invalid_password")));}var Te=(()=>{class n{$activeModal=g(fe);$api=g(I3);$auth=g(ae);$notification=g(M);$toastr=g(M0);$translate=g(bf);invalidCredentials=W$1(false);formGroup=new $({password:new Se("",[ve.required])});disable2fa(){return E(this,null,function*(){this.invalidCredentials.set(false);try{yield this.$api.post("/users/otp/deactivate",this.formGroup.value),this.$activeModal.close(),this.$toastr.success(this.$translate.instant("users.setup_2fa_disable_success"),this.$translate.instant("toast.title_success")),this.$notification.legacyOtpDetected.set(!1);try{yield this.$auth.refreshSession("profile-update");}catch(e){console.error("Failed to refresh session after disabling 2FA:",e);}}catch(e){this.formGroup.setValue({password:""}),this.invalidCredentials.set(true);}})}dismissModal(){this.$activeModal.dismiss("Dismiss");}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=Ja({type:n,selectors:[["app-users-2fa-disable"]],decls:35,vars:29,consts:[[1,"modal-content","modal-content-min-h"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"fas","fa-key","primary-text","icon-xl"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],["for","disable-2fa-password",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["id","disable-2fa-password","type","password","autocomplete","current-password",1,"form-control","custom-input",3,"formControl","placeholder"],["type","error",1,"mt-3","mb-0",3,"dismissible"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click","disabled"],[1,"mb-0"]],template:function(l,i){l&1&&(La(0,"div",0)(1,"div",1)(2,"h5",2),At(3),f_(4,"translate"),Rd(),La(5,"button",3),f_(6,"translate"),rc("click",function(){return i.dismissModal()}),Rd()(),La(7,"div",4)(8,"div",5),dy(9,"i",6),Rd(),La(10,"ul",7)(11,"li"),At(12),f_(13,"translate"),Rd()(),La(14,"ul",8)(15,"li",9)(16,"label",10),At(17),f_(18,"translate"),dy(19,"app-required-indicator"),Rd(),La(20,"div",11),dy(21,"input",12),f_(22,"translate"),KC(),Rd()()(),Re$1(23,Pe,4,4,"ngb-alert",13),Rd(),La(24,"div",14)(25,"div",15)(26,"button",16),f_(27,"translate"),rc("click",function(){return i.dismissModal()}),At(28),f_(29,"translate"),Rd()(),dy(30,"div",17),La(31,"div",18)(32,"button",19),rc("click",function(){return i.disable2fa()}),At(33),f_(34,"translate"),Rd()()()()),l&2&&(ie(3),Ny(h_(4,13,"users.setup_2fa_disable")),ie(2),vr("aria-label",h_(6,15,"form.button_close")),ie(7),Ny(h_(13,17,"users.setup_2fa_disable_current_password")),ie(5),Rt(" ",h_(18,19,"users.label_password")),ie(4),Cy("is-invalid",i.formGroup.controls.password.touched&&i.formGroup.controls.password.invalid),ly("formControl",i.formGroup.controls.password)("placeholder",h_(22,21,"users.label_password")),JC(),ie(2),Oe$1(i.invalidCredentials()&&!i.formGroup.controls.password.value?23:-1),ie(3),vr("aria-label",h_(27,23,"form.button_close")),ie(2),Rt(" ",h_(29,25,"form.button_close")," "),ie(4),ly("disabled",i.formGroup.invalid),ie(),Rt(" ",h_(34,27,"form.button_continue")," "));},dependencies:[Kn,Ye$1,Hn,Jn,mn,X$1,c$1,K8],styles:[".modal-content-min-h[_ngcontent-%COMP%]{min-height:300px}"]})}return n})();var ke=D(St());var qe=n=>({timeDiffError:n});function je(n,h){n&1&&(La(0,"li"),At(1),f_(2,"translate"),Rd()),n&2&&(ie(),Ny(h_(2,1,"users.setup_2fa_scan_qr_code")));}function Ge(n,h){if(n&1&&(La(0,"ngb-alert",8)(1,"p",16),At(2),f_(3,"translate"),Rd(),La(4,"p",17),At(5),f_(6,"translate"),Rd()()),n&2){let e=ye();ly("dismissible",false),ie(2),Ny(h_(3,3,"users.setup_2fa_cannot_setup_2fa")),ie(3),Ny(g_(6,5,"users.setup_2fa_server_time_out",a_(8,qe,e.timeDiffError())));}}function Le(n,h){n&1&&dy(0,"i",27);}function Re(n,h){n&1&&dy(0,"i",28);}function Oe(n,h){n&1&&(La(0,"span",29),At(1),f_(2,"translate"),Rd()),n&2&&(ie(),Rt(" ",h_(2,1,"common.a11y.copied")," "));}function ze(n,h){if(n&1){let e=nc();La(0,"div",21),At(1),f_(2,"translate"),dy(3,"br"),At(4),La(5,"button",26),f_(6,"translate"),rc("click",function(){Go(e);let i=ye(2);return Wo(i.copySecretToClipboard())}),Re$1(7,Le,1,0,"i",27)(8,Re,1,0,"i",28),Rd(),Re$1(9,Oe,3,3,"span",29),Rd();}if(n&2){let e=ye(2);ie(),Rt(" ",h_(2,5,"users.setup_2fa_scan_qr_manual")),ie(3),Rt(" ",e.otpSecret()," "),ie(),vr("aria-label",h_(6,7,"common.a11y.copy_to_clipboard")),ie(2),Oe$1(e.secretCopied()?7:8),ie(2),Oe$1(e.secretCopied()?9:-1);}}function He(n,h){if(n&1&&(La(0,"ul",9)(1,"li",18)(2,"div",19),dy(3,"app-qrcode",20),Rd(),Re$1(4,ze,10,9,"div",21),Rd(),La(5,"li",22)(6,"label",23),At(7),f_(8,"translate"),dy(9,"app-required-indicator"),Rd(),La(10,"div",24),dy(11,"input",25),KC(),Rd()()()),n&2){let e=ye();ie(3),ly("data",e.otpString()),ie(),Oe$1(e.otpSecret()?4:-1),ie(3),Rt(" ",h_(8,6,"users.setup_2fa_enter_code")),ie(4),Cy("is-invalid",e.formGroup.controls.code.touched&&e.formGroup.controls.code.invalid),ly("formControl",e.formGroup.controls.code),JC();}}function Je(n,h){if(n&1){let e=nc();La(0,"button",30),f_(1,"translate"),rc("click",function(){Go(e);let i=ye();return Wo(i.dismissModal())}),At(2),f_(3,"translate"),Rd();}n&2&&(vr("aria-label",h_(1,2,"form.button_close")),ie(2),Rt(" ",h_(3,4,"form.button_close")," "));}function Qe(n,h){if(n&1){let e=nc();La(0,"button",30),f_(1,"translate"),rc("click",function(){Go(e);let i=ye();return Wo(i.dismissModal())}),At(2),f_(3,"translate"),Rd();}n&2&&(vr("aria-label",h_(1,2,"form.button_close")),ie(2),Rt(" ",h_(3,4,"form.button_close")," "));}function Ke(n,h){if(n&1){let e=nc();La(0,"button",31),rc("click",function(){Go(e);let i=ye();return Wo(i.enable2fa())}),At(1),f_(2,"translate"),Rd();}if(n&2){let e=ye();ly("disabled",e.formGroup.invalid),ie(),Rt(" ",h_(2,2,"form.button_continue")," ");}}var Be=(()=>{class n{$activeModal=g(fe);$api=g(I3);$toastr=g(M0);$translate=g(bf);modalData=g(c);user=this.modalData.user;timeDiffError=W$1(null);otpString=W$1(void 0);otpSecret=W$1(void 0);secretCopied=W$1(false);copyTimeout=null;formGroup=new $({code:new Se("",[ve.required,ve.minLength(6),ve.maxLength(6)])});ngOnInit(){this.initialize();}initialize(){return E(this,null,function*(){try{let e=yield this.$api.post("/users/otp/setup",{});this.checkTimeDiff(e.timestamp),this.timeDiffError()||(this.otpString.set(e.otpauth),this.otpSecret.set(new URL(e.otpauth).searchParams.get("secret")||""));}catch(e){this.$activeModal.dismiss(),console.error(e),this.$toastr.error(this.$translate.instant("users.setup_2fa_enable_error"),this.$translate.instant("toast.title_error"));}})}enable2fa(){return E(this,null,function*(){try{yield this.$api.post("/users/otp/activate",this.formGroup.value),this.$activeModal.close();}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("users.setup_2fa_activate_error"),this.$translate.instant("toast.title_error"));}})}copySecretToClipboard(){return E(this,null,function*(){let e=this.otpSecret();e&&(yield navigator.clipboard.writeText(e),this.secretCopied.set(true),this.copyTimeout&&clearTimeout(this.copyTimeout),this.copyTimeout=setTimeout(()=>{this.secretCopied.set(false);},3e3));})}dismissModal(){this.$activeModal.dismiss("Dismiss");}checkTimeDiff(e){let l=(0, ke.default)(e).diff(new Date,"millisecond");l<-5e3||l>5e3?this.timeDiffError.set(l):this.timeDiffError.set(null);}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=Ja({type:n,selectors:[["app-users-2fa-enable"]],decls:24,vars:14,consts:[[1,"modal-content","setup2fa"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","mb-3"],["aria-hidden","true",1,"fas","fa-key","primary-text","icon-xl"],[1,"mb-3"],["type","error",1,"mb-0",3,"dismissible"],[1,"list-group","list-group-box","mb-0"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"disabled"],[1,"fw-bold","mb-1"],[1,"mb-0"],[1,"list-group-item","text-center"],[1,"text-center","w-100","d-flex","justify-content-center","my-2"],[1,"mx-auto","qrcode-size",3,"data"],[1,"grey-text","small","mt-0","mb-1"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],["for","enable-2fa-code",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["id","enable-2fa-code","type","text","placeholder","eg. 123456","autocomplete","one-time-code","autocapitalize","none","inputmode","numeric","pattern","[0-9]*",1,"form-control","custom-input",3,"formControl"],["type","button",1,"btn","btn-link","p-0","ms-1","text-primary","align-baseline",3,"click"],["aria-hidden","true",1,"fas","fa-check","green-text"],["aria-hidden","true",1,"fas","fa-copy"],["role","status","aria-live","polite","aria-atomic","true",1,"visually-hidden"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"]],template:function(l,i){l&1&&(La(0,"div",0)(1,"div",1)(2,"h5",2),At(3),f_(4,"translate"),Rd(),La(5,"button",3),f_(6,"translate"),rc("click",function(){return i.dismissModal()}),Rd()(),La(7,"div",4)(8,"div",5),dy(9,"i",6),Rd(),La(10,"ul",7)(11,"li"),At(12),f_(13,"translate"),Rd(),Re$1(14,je,3,3,"li"),Rd(),Re$1(15,Ge,7,10,"ngb-alert",8)(16,He,12,8,"ul",9),Rd(),La(17,"div",10)(18,"div",11),Re$1(19,Je,4,6,"button",12),Rd(),La(20,"div",13),Re$1(21,Qe,4,6,"button",12),Rd(),La(22,"div",14),Re$1(23,Ke,3,4,"button",15),Rd()()()),l&2&&(ie(3),Ny(h_(4,8,"users.setup_2fa")),ie(2),vr("aria-label",h_(6,10,"form.button_close")),ie(7),Ny(h_(13,12,"users.setup_2fa_warning")),ie(2),Oe$1(i.timeDiffError()?-1:14),ie(),Oe$1(i.timeDiffError()?15:16),ie(4),Oe$1(i.timeDiffError()?-1:19),ie(2),Oe$1(i.timeDiffError()?21:-1),ie(2),Oe$1(i.timeDiffError()?-1:23));},dependencies:[X$1,pr,Kn,Ye$1,Hn,zt$1,Jn,mn,c$1,K8],styles:[".qrcode-size[_ngcontent-%COMP%]{width:175px;height:175px}"]})}return n})();var Ie=(()=>{class n{$activeModal=g(fe);$api=g(I3);$errors=g(m);$toastr=g(M0);$translate=g(bf);modalData=g(d);existingUsers=this.modalData.existingUsers;form=new $({username:new Se("",{nonNullable:true,validators:[ve.required]}),name:new Se("",{nonNullable:true,validators:[ve.required]}),password:new Se("",{nonNullable:true,validators:[ve.required,ve.minLength(4)]}),passwordConfirm:new Se("",{nonNullable:true,validators:[ve.required]}),admin:new Se(true,{nonNullable:true})},this.matchPassword);ngOnInit(){this.form.controls.username.addValidators(this.duplicateUsernameValidator.bind(this)),this.form.controls.username.updateValueAndValidity();}onSubmit(l){return E(this,arguments,function*({value:e}){try{yield this.$api.post("/users",e),this.$activeModal.close();}catch(i){this.$toastr.error(this.$errors.toToastMessage(i),this.$translate.instant("toast.title_error"));}})}dismissModal(){this.$activeModal.dismiss("Dismiss");}duplicateUsernameValidator(e){if(!e.value)return null;let l=e.value.trim().toLowerCase();return l&&this.existingUsers.some(c=>c.username?.toLowerCase()===l)?{duplicateUsername:true}:null}matchPassword(e){let l=e.get("passwordConfirm"),i=e.get("password")?.value,c=l?.value,k=w({},l?.errors??{});return delete k.matchPassword,i!==c?(l?.setErrors(x(w({},k),{matchPassword:true})),{matchPassword:true}):(l?.setErrors(Object.keys(k).length?k:null),null)}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=Ja({type:n,selectors:[["app-users-add"]],decls:63,vars:52,consts:[[1,"modal-content"],["novalidate","",3,"ngSubmit","formGroup"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","mb-4"],[1,"fas","fa-user-plus","primary-text","icon-xl"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],["for","form-username",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["formControlName","username","type","text","id","form-username","autocomplete","username","autocapitalize","none",1,"form-control","custom-input"],["for","form-name",1,"mb-2","mb-md-0","w-100","w-md-50"],["formControlName","name","type","text","id","form-name","autocomplete","name",1,"form-control","custom-input"],["for","form-pass",1,"mb-2","mb-md-0","w-100","w-md-50"],["formControlName","password","type","password","autocomplete","new-password","id","form-pass",1,"form-control","custom-input"],["for","form-pass-confirm",1,"mb-2","mb-md-0","w-100","w-md-50"],["formControlName","passwordConfirm","type","password","autocomplete","new-password","id","form-pass-confirm",1,"form-control","custom-input"],[1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","pb-2"],[1,"text-start"],[1,"text-end","grey-text","d-flex","align-items-center"],["formControlName","admin","type","checkbox","id","isAdmin",1,"rendux-input"],["for","isAdmin",1,"rendux-label","ms-3"],[1,"modal-footer","justify-content-between"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-center"],[1,"text-end"],["type","submit",1,"btn","btn-primary",3,"disabled"]],template:function(l,i){l&1&&(La(0,"div",0)(1,"form",1),rc("ngSubmit",function(){return i.onSubmit(i.form)}),La(2,"div",2)(3,"h5",3),At(4),f_(5,"translate"),Rd(),La(6,"button",4),f_(7,"translate"),rc("click",function(){return i.dismissModal()}),Rd()(),La(8,"div",5)(9,"div",6),dy(10,"i",7),Rd(),La(11,"ul",8)(12,"li",9)(13,"label",10),At(14),f_(15,"translate"),dy(16,"app-required-indicator"),Rd(),La(17,"div",11),dy(18,"input",12),f_(19,"translate"),KC(),Rd()(),La(20,"li",9)(21,"label",13),At(22),f_(23,"translate"),dy(24,"app-required-indicator"),Rd(),La(25,"div",11),dy(26,"input",14),f_(27,"translate"),KC(),Rd()(),La(28,"li",9)(29,"label",15),At(30),f_(31,"translate"),dy(32,"app-required-indicator"),Rd(),La(33,"div",11),dy(34,"input",16),f_(35,"translate"),KC(),Rd()(),La(36,"li",9)(37,"label",17),At(38),f_(39,"translate"),dy(40,"app-required-indicator"),Rd(),La(41,"div",11),dy(42,"input",18),f_(43,"translate"),KC(),Rd()(),La(44,"li",19)(45,"span",20),At(46),f_(47,"translate"),dy(48,"app-required-indicator"),Rd(),La(49,"div",21),dy(50,"input",22),f_(51,"translate"),KC(),dy(52,"label",23),Rd()()()(),La(53,"div",24)(54,"div",20)(55,"button",25),rc("click",function(){return i.dismissModal()}),At(56),f_(57,"translate"),Rd()(),dy(58,"div",26),La(59,"div",27)(60,"button",28),At(61),f_(62,"translate"),Rd()()()()()),l&2&&(ie(),ly("formGroup",i.form),ie(3),Ny(h_(5,24,"users.title_add_user")),ie(2),vr("aria-label",h_(7,26,"form.button_close")),ie(8),Rt(" ",h_(15,28,"users.label_username")),ie(4),Cy("is-invalid",i.form.controls.username.touched&&i.form.controls.username.invalid),vr("aria-label",h_(19,30,"users.label_username")),JC(),ie(4),Rt(" ",h_(23,32,"users.label_full_name")),ie(4),Cy("is-invalid",i.form.controls.name.touched&&i.form.controls.name.invalid),vr("aria-label",h_(27,34,"users.label_full_name")),JC(),ie(4),Rt(" ",h_(31,36,"users.label_password")),ie(4),Cy("is-invalid",i.form.controls.password.touched&&i.form.controls.password.invalid),vr("aria-label",h_(35,38,"users.label_password")),JC(),ie(4),Rt(" ",h_(39,40,"users.label_confirm_password")),ie(4),Cy("is-invalid",i.form.controls.passwordConfirm.touched&&i.form.controls.passwordConfirm.invalid),vr("aria-label",h_(43,42,"users.label_confirm_password")),JC(),ie(4),Ny(h_(47,44,"users.label_admin_user")),ie(4),vr("aria-label",h_(51,46,"users.label_admin_user")),JC(),ie(6),Rt(" ",h_(57,48,"form.button_close")," "),ie(4),ly("disabled",!i.form.valid),ie(),Rt(" ",h_(62,50,"form.button_save")," "));},dependencies:[Kn,zn,Ye$1,Mt,Hn,Ln,Jn,Cn,_n,c$1,K8],encapsulation:2})}return n})();function We(n,h){n&1&&dy(0,"app-required-indicator");}function Xe(n,h){if(n&1&&(La(0,"li",9)(1,"label",29),At(2),f_(3,"translate"),dy(4,"app-required-indicator"),Rd(),La(5,"div",11),dy(6,"input",30),f_(7,"translate"),KC(),Rd()()),n&2){let e=ye();ie(2),Rt(" ",h_(3,4,"users.label_confirm_password")),ie(4),Cy("is-invalid",e.form.controls.passwordConfirm.touched&&e.form.controls.passwordConfirm.invalid),vr("aria-label",h_(7,6,"users.label_confirm_password")),JC();}}function Ye(n,h){n&1&&(La(0,"div",22)(1,"div",25),At(2),f_(3,"translate"),Rd()()),n&2&&(ie(2),Ny(h_(3,1,"common.phrases.are_you_sure")));}var Ae=(()=>{class n{$activeModal=g(fe);$api=g(I3);$auth=g(ae);$errors=g(m);$toastr=g(M0);$translate=g(bf);modalData=g(c);user=this.modalData.user;existingUsers=this.modalData.existingUsers||[];isCurrentUser=W$1(false);deleteMode=W$1(false);initialFormValue={};form=new $({username:new Se("",{nonNullable:true,validators:[ve.required]}),name:new Se("",{nonNullable:true,validators:[ve.required]}),password:new Se("",{nonNullable:true,validators:[ve.minLength(4)]}),passwordConfirm:new Se("",{nonNullable:true}),admin:new Se(true,{nonNullable:true})},this.matchPassword);isLastAdmin=X(()=>this.user?.admin?this.existingUsers.filter(l=>l.admin).length<=1:false);canDelete=X(()=>!this.isCurrentUser()&&!this.isLastAdmin());ngOnInit(){this.user&&(this.isCurrentUser.set(this.$auth.user.username===this.user.username),this.form.patchValue(this.user),this.initialFormValue=this.form.getRawValue(),this.form.controls.username.addValidators(this.duplicateUsernameValidator.bind(this)),this.form.controls.username.updateValueAndValidity(),this.isLastAdmin()&&this.form.controls.admin.disable());}onSubmit(l){return E(this,arguments,function*({value:e}){if(this.user){if(this.deleteMode()){try{yield this.$api.delete(`/users/${this.user.id}`),this.$activeModal.close();}catch(i){console.error(i),this.$toastr.error(this.$errors.toToastMessage(i),this.$translate.instant("toast.title_error"));}return}try{yield this.$api.patch(`/users/${this.user.id}`,e),this.$activeModal.close(),this.isCurrentUser()&&e.username!==this.$auth.user.username&&this.$auth.logout();}catch(i){console.error(i),this.$toastr.error(this.$errors.toToastMessage(i),this.$translate.instant("toast.title_error"));}}})}toggleDeleteMode(e){this.deleteMode.set(!this.deleteMode()),this.deleteMode()?this.form.disable():(this.form.enable(),this.isLastAdmin()&&this.form.controls.admin.disable()),e.target.blur();}isFormUnchanged(){return this.form.controls.password.value?false:JSON.stringify(this.form.getRawValue())===JSON.stringify(this.initialFormValue)}duplicateUsernameValidator(e){if(!e.value)return null;let l=e.value.trim().toLowerCase();return l&&this.existingUsers.some(c=>c.id!==this.user.id&&c.username?.toLowerCase()===l)?{duplicateUsername:true}:null}dismissModal(){this.$activeModal.dismiss("Dismiss");}matchPassword(e){let l=e.get("passwordConfirm"),i=e.get("password")?.value,c=l?.value,k=w({},l?.errors??{});return delete k.matchPassword,i!==c?(l?.setErrors(x(w({},k),{matchPassword:true})),{matchPassword:true}):(l?.setErrors(Object.keys(k).length?k:null),null)}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=Ja({type:n,selectors:[["app-users-edit"]],decls:60,vars:61,consts:[[1,"modal-content"],["novalidate","",3,"ngSubmit","formGroup"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","mb-4"],[1,"fas","fa-user-pen","primary-text","icon-xl"],[1,"list-group","list-group-box"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],["for","form-username",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["formControlName","username","type","text","id","form-username","autocomplete","off","autocapitalize","none",1,"form-control","custom-input"],["for","form-name",1,"mb-2","mb-md-0","w-100","w-md-50"],["formControlName","name","type","text","id","form-name","autocomplete","name",1,"form-control","custom-input"],["for","form-pass",1,"mb-2","mb-md-0","w-100","w-md-50"],["formControlName","password","type","password","autocomplete","new-password","id","form-pass",1,"form-control","custom-input"],[1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","pb-2"],[1,"text-start"],[1,"text-end","grey-text","d-flex","align-items-center"],["type","checkbox","formControlName","admin","id","isAdmin",1,"rendux-input"],["for","isAdmin",1,"rendux-label","ms-3"],[1,"alert","alert-warning","mb-0"],[1,"modal-footer","justify-content-between"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-center"],[1,"text-end"],["type","button",1,"btn","btn-elegant","me-2",3,"click","disabled"],["type","submit",3,"disabled"],["for","form-pass-confirm",1,"mb-2","mb-md-0","w-100","w-md-50"],["formControlName","passwordConfirm","type","password","autocomplete","new-password","id","form-pass-confirm",1,"form-control","custom-input"]],template:function(l,i){l&1&&(La(0,"div",0)(1,"form",1),rc("ngSubmit",function(){return i.onSubmit(i.form)}),La(2,"div",2)(3,"h5",3),At(4),f_(5,"translate"),Rd(),La(6,"button",4),f_(7,"translate"),rc("click",function(){return i.dismissModal()}),Rd()(),La(8,"div",5)(9,"div",6),dy(10,"i",7),Rd(),La(11,"ul",8)(12,"li",9)(13,"label",10),At(14),f_(15,"translate"),dy(16,"app-required-indicator"),Rd(),La(17,"div",11),dy(18,"input",12),f_(19,"translate"),KC(),Rd()(),La(20,"li",9)(21,"label",13),At(22),f_(23,"translate"),dy(24,"app-required-indicator"),Rd(),La(25,"div",11),dy(26,"input",14),f_(27,"translate"),KC(),Rd()(),La(28,"li",9)(29,"label",15),At(30),f_(31,"translate"),Re$1(32,We,1,0,"app-required-indicator"),Rd(),La(33,"div",11),dy(34,"input",16),f_(35,"translate"),KC(),Rd()(),Re$1(36,Xe,8,8,"li",9),La(37,"li",17)(38,"span",18),At(39),f_(40,"translate"),dy(41,"app-required-indicator"),Rd(),La(42,"div",19),dy(43,"input",20),f_(44,"translate"),KC(),dy(45,"label",21),Rd()()(),Re$1(46,Ye,4,3,"div",22),Rd(),La(47,"div",23)(48,"div",18)(49,"button",24),rc("click",function(){return i.dismissModal()}),At(50),f_(51,"translate"),Rd()(),dy(52,"div",25),La(53,"div",26)(54,"button",27),f_(55,"translate"),rc("click",function(k){return i.toggleDeleteMode(k)}),dy(56,"i"),Rd(),La(57,"button",28),At(58),f_(59,"translate"),Rd()()()()()),l&2&&(ie(),ly("formGroup",i.form),ie(3),Ny(h_(5,35,"users.title_edit_user")),ie(2),vr("aria-label",h_(7,37,"form.button_close")),ie(5),Cy("opacity-muted",i.deleteMode())("mb-0",!i.deleteMode())("mb-4",i.deleteMode()),ie(3),Rt(" ",h_(15,39,"users.label_username")),ie(4),Cy("is-invalid",i.form.controls.username.touched&&i.form.controls.username.invalid),vr("aria-label",h_(19,41,"users.label_username")),JC(),ie(4),Rt(" ",h_(23,43,"users.label_full_name")),ie(4),Cy("is-invalid",i.form.controls.name.touched&&i.form.controls.name.invalid),vr("aria-label",h_(27,45,"users.label_full_name")),JC(),ie(4),Rt(" ",h_(31,47,"users.label_new_password")," "),ie(2),Oe$1(i.form.controls.password.value?32:-1),ie(2),Cy("is-invalid",i.form.controls.password.touched&&i.form.controls.password.invalid),vr("aria-label",h_(35,49,"users.label_new_password")),JC(),ie(2),Oe$1(i.form.controls.password.value?36:-1),ie(3),Ny(h_(40,51,"users.label_admin_user")),ie(4),vr("aria-label",h_(44,53,"users.label_admin_user")),JC(),ie(3),Oe$1(i.deleteMode()?46:-1),ie(4),Rt(" ",h_(51,55,"form.button_close")," "),ie(4),ly("disabled",!i.canDelete()),vr("aria-label",h_(55,57,"users.button_delete_user")),ie(2),Qt(i.deleteMode()?"fas fa-undo":"fas fa-trash"),ie(),Qt(`btn ${i.deleteMode()?"btn-danger":"btn-primary"}`),ly("disabled",!i.deleteMode()&&(!i.form.valid||i.isFormUnchanged())),ie(),Rt(" ",h_(59,59,i.deleteMode()?"form.button_delete":"form.button_save")," "));},dependencies:[Kn,zn,Ye$1,Mt,Hn,Ln,Jn,Cn,_n,c$1,K8],encapsulation:2})}return n})();var Ne=(()=>{class n{$activeModal=g(fe);dismissModal(){this.$activeModal.dismiss("Dismiss");}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=Ja({type:n,selectors:[["app-users-support"]],decls:46,vars:36,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"text-center","mb-3"],[1,"far","fa-circle-question","primary-text","icon-xl"],[1,"ms-2"],[1,"mb-0"],[1,"mb-2","grey-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-end"]],template:function(l,i){l&1&&(La(0,"div",0)(1,"form")(2,"div",1)(3,"h5",2),At(4),f_(5,"translate"),Rd(),La(6,"button",3),f_(7,"translate"),rc("click",function(){return i.dismissModal()}),Rd()(),La(8,"div",4)(9,"div",5),dy(10,"i",6),Rd(),La(11,"h5",7),At(12),f_(13,"translate"),Rd(),La(14,"ul",8)(15,"li"),At(16),f_(17,"translate"),Rd(),La(18,"ul",9)(19,"li"),At(20),f_(21,"translate"),Rd(),La(22,"li"),At(23),f_(24,"translate"),Rd(),La(25,"li"),At(26),f_(27,"translate"),f_(28,"translate"),Rd(),La(29,"li"),At(30),f_(31,"translate"),Rd(),La(32,"li"),At(33),f_(34,"translate"),Rd()(),La(35,"li"),At(36),f_(37,"translate"),Rd()(),dy(38,"app-support-banner"),Rd(),La(39,"div",10),dy(40,"div",11),La(41,"div",12)(42,"button",13),rc("click",function(){return i.dismissModal()}),At(43),f_(44,"translate"),Rd()(),dy(45,"div",14),Rd()()()),l&2&&(ie(4),Ny(h_(5,12,"support.title")),ie(2),vr("aria-label",h_(7,14,"form.button_close")),ie(6),Ny(h_(13,16,"users.title_users")),ie(4),Ny(h_(17,18,"users.support.acc_1")),ie(4),Ny(h_(21,20,"menu.label_status")),ie(3),Ny(h_(24,22,"menu.label_plugins")),ie(3),xy("",h_(27,24,"menu.label_accessories")," (",h_(28,26,"users.support.control"),")"),ie(4),Ny(h_(31,28,"menu.linux.label_logs")),ie(3),Ny(h_(34,30,"support.title")),ie(3),Ny(h_(37,32,"users.support.acc_2")),ie(7),Rt(" ",h_(44,34,"form.button_close")," "));},dependencies:[y,K8],encapsulation:2})}return n})();function Ze(n,h){if(n&1){let e=nc();ke$1(0,"button",21),_i("click",function(){Go(e);let i=ye(2).$implicit,c=ye();return Wo(c.disable2fa(i))}),At(1),f_(2,"translate"),Je$1();}if(n&2){let e=ye(2).$implicit,l=ye();bi("disabled",e.username!==l.username),ie(),Rt(" ",h_(2,2,"users.setup_2fa_disable")," ");}}function et(n,h){if(n&1){let e=nc();ke$1(0,"button",22),_i("click",function(){Go(e);let i=ye(2).$implicit,c=ye();return Wo(c.setup2fa(i))}),At(1),f_(2,"translate"),Je$1();}if(n&2){let e=ye(2).$implicit,l=ye();bi("disabled",e.username!==l.username),ie(),Rt(" ",h_(2,2,"users.setup_2fa")," ");}}function tt(n,h){if(n&1&&Re$1(0,Ze,3,4,"button",19)(1,et,3,4,"button",20),n&2){let e=ye().$implicit;Oe$1(e.otpActive?0:1);}}function it(n,h){n&1&&Dr(0,"div");}function nt(n,h){if(n&1){let e=nc();ke$1(0,"div",9)(1,"div",10)(2,"div",11)(3,"div",12)(4,"span",13)(5,"h4"),At(6),Je$1(),ke$1(7,"h5",14),Dr(8,"i",15),At(9),Je$1()()(),ke$1(10,"div",16),Re$1(11,tt,2,1)(12,it,1,0,"div"),ke$1(13,"div")(14,"button",17),f_(15,"translate"),_i("click",function(){let i=Go(e).$implicit,c=ye();return Wo(c.openEditUser(i))}),Dr(16,"i",18),Je$1()()()()()();}if(n&2){let e=h.$implicit;ie(6),Ny(e.name),ie(2),Cy("fa-user-secret",e.admin)("fa-user",!e.admin),ie(),Rt(" ",e.username," "),ie(2),Oe$1(e.admin?11:12),ie(3),vr("aria-label",h_(15,8,"form.button_edit"));}}var Ti=(()=>{class n{injector=g(we);destroyRef=g(ne);$api=g(I3);$auth=g(ae);$errors=g(m);$modal=g(si);$route=g(W);$settings=g(zt);$toastr=g(M0);$translate=g(bf);homebridgeUsers=W$1([]);username=this.$auth.user.username;isAdmin=this.$auth.user.admin;ngOnInit(){let e=this.$translate.instant("users.title_users");this.$settings.setPageTitle(e),this.$route.data.pipe(An(this.destroyRef)).subscribe(l=>{this.homebridgeUsers.set(l.homebridgeUsers??[]);});}reloadUsers(){return E(this,null,function*(){try{let e=yield this.$api.get("/users");this.homebridgeUsers.set(e);}catch(e){console.error(e),this.$toastr.error(this.$errors.toToastMessage(e),this.$translate.instant("toast.title_error"));}})}openAddNewUser(){return E(this,null,function*(){let e=ty([{provide:d,useValue:{existingUsers:this.homebridgeUsers()}}],this.injector),l=this.$modal.open(Ie,{size:"lg",backdrop:"static",injector:e});try{yield l.result,this.reloadUsers();}catch(i){}})}openEditUser(e){return E(this,null,function*(){let l=ty([{provide:c,useValue:{user:e,existingUsers:this.homebridgeUsers()}}],this.injector),i=this.$modal.open(Ae,{size:"lg",backdrop:"static",injector:l});try{yield i.result,this.reloadUsers();}catch(c){}})}setup2fa(e){return E(this,null,function*(){let l=ty([{provide:c,useValue:{user:e}}],this.injector),i=this.$modal.open(Be,{size:"lg",backdrop:"static",injector:l});try{yield i.result,this.reloadUsers();}catch(c){}})}disable2fa(e){return E(this,null,function*(){let l=ty([{provide:c,useValue:{user:e}}],this.injector),i=this.$modal.open(Te,{size:"lg",backdrop:"static",injector:l});try{yield i.result,this.reloadUsers();}catch(c){}})}openSupport(){this.$modal.open(Ne,{size:"lg",backdrop:"static"});}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=Ja({type:n,selectors:[["app-users"]],decls:15,vars:9,consts:[[1,"row","mb-3"],[1,"col-6"],[1,"primary-text","m-0"],[1,"col-6","text-end"],["type","button",1,"btn","btn-elegant","waves-effect","m-0","me-2",3,"click"],["aria-hidden","true",1,"fas","fa-user-plus"],["type","button",1,"btn","btn-elegant","my-0","me-0",3,"click"],["aria-hidden","true",1,"far","fa-circle-question"],[1,"row"],[1,"col-md-6","mb-4"],[1,"card","card-body"],[1,"d-flex","flex-column"],[1,"d-flex","flex-row","mb-3"],[1,"me-auto","my-0"],[1,"small","text-truncate","grey-text"],["aria-hidden","true",1,"fas"],[1,"d-flex","flex-row","justify-content-between"],["type","button",1,"btn","btn-elegant","m-0",3,"click"],["aria-hidden","true",1,"fas","fa-user-pen"],["type","button",1,"btn","btn-elegant","m-0",3,"disabled"],["type","button",1,"btn","btn-primary","m-0",3,"disabled"],["type","button",1,"btn","btn-elegant","m-0",3,"click","disabled"],["type","button",1,"btn","btn-primary","m-0",3,"click","disabled"]],template:function(l,i){l&1&&(ke$1(0,"div",0)(1,"div",1)(2,"h3",2),At(3),f_(4,"translate"),Je$1()(),ke$1(5,"div",3)(6,"button",4),f_(7,"translate"),_i("click",function(){return i.openAddNewUser()}),Dr(8,"i",5),Je$1(),ke$1(9,"button",6),f_(10,"translate"),_i("click",function(){return i.openSupport()}),Dr(11,"i",7),Je$1()()(),ke$1(12,"div",8),dT(13,nt,17,10,"div",9,lT),Je$1()),l&2&&(ie(3),Ny(h_(4,3,"users.title_users")),ie(3),vr("aria-label",h_(7,5,"users.button_add_user")),ie(3),vr("aria-label",h_(10,7,"support.title")),ie(4),fT(i.homebridgeUsers()));},dependencies:[K8],encapsulation:2})}return n})();export{Ti as UsersComponent};