homebridge-config-ui-x
Version:
A web based management, configuration and control platform for Homebridge.
2 lines (1 loc) • 30.9 kB
JavaScript
import{a as Ue}from"./chunk-AYSHSJRC.js";import{a as z}from"./chunk-NI3PX2WC.js";import{a as De}from"./chunk-DVKLDZZ3.js";import{o as O,p as oe}from"./chunk-SMGTZ45N.js";import{a as se}from"./chunk-T7RKA523.js";import{s as N,t as Se}from"./chunk-2QHNXSQY.js";import{a as W}from"./chunk-VYTJCKZA.js";import{a as Ce}from"./chunk-IL6HHVES.js";import{c as Ee,d as K}from"./chunk-LKBXKG4K.js";import{B as ye,C as L,D as R,b as ee,c as q,d as y,e as j,f as te,g as G,j as S,m as ie,q as ne,r as re,s as ae}from"./chunk-BQZ376DP.js";import{a as Ne,b as we}from"./chunk-RFCSHRPV.js";import{d as ge}from"./chunk-3APJQTJL.js";import{$b as he,$c as I,Ea as t,Kb as g,Lb as de,Mb as d,Nb as b,Ob as u,Pb as ve,Qa as X,Ra as D,Yc as B,Zc as M,aa as p,ab as f,cb as x,da as ce,db as C,dc as o,dd as A,ec as s,fa as V,fb as fe,fc as xe,ga as F,gb as be,hb as _e,ib as E,jb as a,kb as r,la as ue,lb as m,lc as me,mb as T,nb as k,ob as J,qa as U,vb as P,wb as le,xb as _,yb as Q,zb as v}from"./chunk-LTGI3NYM.js";import{a as H,b as Z,g as Ae,h as w}from"./chunk-B4AJQJMI.js";function Ve(n,h){n&1&&(a(0,"ngb-alert",13)(1,"p",20),d(2),o(3,"translate"),r()()),n&2&&(E("dismissible",!1),t(2),b(s(3,2,"login.invalid_password")))}var Me=(()=>{class n{$activeModal=p(N);$api=p(A);$auth=p(K);$notification=p(Ee);$toastr=p(I);$translate=p(B);invalidCredentials=U(!1);formGroup=new G({password:new S("",[y.required])});disable2fa(){return w(this,null,function*(){this.invalidCredentials.set(!1);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()}catch(e){console.error("Failed to refresh session after disabling 2FA:",e)}}catch(e){this.formGroup.setValue({password:""}),this.invalidCredentials.set(!0)}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=D({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&&(a(0,"div",0)(1,"div",1)(2,"h5",2),d(3),o(4,"translate"),r(),a(5,"button",3),o(6,"translate"),_("click",function(){return i.dismissModal()}),r()(),a(7,"div",4)(8,"div",5),m(9,"i",6),r(),a(10,"ul",7)(11,"li"),d(12),o(13,"translate"),r()(),a(14,"ul",8)(15,"li",9)(16,"label",10),d(17),o(18,"translate"),m(19,"app-required-indicator"),r(),a(20,"div",11),m(21,"input",12),o(22,"translate"),r()()(),x(23,Ve,4,4,"ngb-alert",13),r(),a(24,"div",14)(25,"div",15)(26,"button",16),o(27,"translate"),_("click",function(){return i.dismissModal()}),d(28),o(29,"translate"),r()(),m(30,"div",17),a(31,"div",18)(32,"button",19),_("click",function(){return i.disable2fa()}),d(33),o(34,"translate"),r()()()()),l&2&&(t(3),b(s(4,13,"users.setup_2fa_disable")),t(2),f("aria-label",s(6,15,"form.button_close")),t(7),b(s(13,17,"users.setup_2fa_disable_current_password")),t(5),u(" ",s(18,19,"users.label_password")),t(4),g("is-invalid",i.formGroup.controls.password.touched&&i.formGroup.controls.password.invalid),E("formControl",i.formGroup.controls.password)("placeholder",s(22,21,"users.label_password")),t(2),C(i.invalidCredentials()&&!i.formGroup.controls.password.value?23:-1),t(3),f("aria-label",s(27,23,"form.button_close")),t(2),u(" ",s(29,25,"form.button_close")," "),t(4),E("disabled",i.formGroup.invalid),t(),u(" ",s(34,27,"form.button_continue")," "))},dependencies:[L,q,j,R,ne,se,z,M],styles:[".modal-content-min-h[_ngcontent-%COMP%]{min-height:300px}"],changeDetection:0})}return n})();var $e=Ae(Ne(),1);var Fe=n=>({timeDiffError:n});function Pe(n,h){n&1&&(a(0,"li"),d(1),o(2,"translate"),r()),n&2&&(t(),b(s(2,1,"users.setup_2fa_scan_qr_code")))}function qe(n,h){if(n&1&&(a(0,"ngb-alert",8)(1,"p",16),d(2),o(3,"translate"),r(),a(4,"p",17),d(5),o(6,"translate"),r()()),n&2){let e=v();E("dismissible",!1),t(2),b(s(3,3,"users.setup_2fa_cannot_setup_2fa")),t(3),b(xe(6,5,"users.setup_2fa_server_time_out",he(8,Fe,e.timeDiffError())))}}function je(n,h){n&1&&m(0,"i",27)}function Ge(n,h){n&1&&m(0,"i",28)}function Le(n,h){n&1&&(a(0,"span",29),d(1),o(2,"translate"),r()),n&2&&(t(),u(" ",s(2,1,"common.a11y.copied")," "))}function Re(n,h){if(n&1){let e=P();a(0,"div",21),d(1),o(2,"translate"),m(3,"br"),d(4),a(5,"button",26),o(6,"translate"),_("click",function(){V(e);let i=v(2);return F(i.copySecretToClipboard())}),x(7,je,1,0,"i",27)(8,Ge,1,0,"i",28),r(),x(9,Le,3,3,"span",29),r()}if(n&2){let e=v(2);t(),u(" ",s(2,5,"users.setup_2fa_scan_qr_manual")),t(3),u(" ",e.otpSecret()," "),t(),f("aria-label",s(6,7,"common.a11y.copy_to_clipboard")),t(2),C(e.secretCopied()?7:8),t(2),C(e.secretCopied()?9:-1)}}function Oe(n,h){if(n&1&&(a(0,"ul",9)(1,"li",18)(2,"div",19),m(3,"app-qrcode",20),r(),x(4,Re,10,9,"div",21),r(),a(5,"li",22)(6,"label",23),d(7),o(8,"translate"),m(9,"app-required-indicator"),r(),a(10,"div",24),m(11,"input",25),r()()()),n&2){let e=v();t(3),E("data",e.otpString()),t(),C(e.otpSecret()?4:-1),t(3),u(" ",s(8,6,"users.setup_2fa_enter_code")),t(4),g("is-invalid",e.formGroup.controls.code.touched&&e.formGroup.controls.code.invalid),E("formControl",e.formGroup.controls.code)}}function ze(n,h){if(n&1){let e=P();a(0,"button",30),o(1,"translate"),_("click",function(){V(e);let i=v();return F(i.dismissModal())}),d(2),o(3,"translate"),r()}n&2&&(f("aria-label",s(1,2,"form.button_close")),t(2),u(" ",s(3,4,"form.button_close")," "))}function He(n,h){if(n&1){let e=P();a(0,"button",30),o(1,"translate"),_("click",function(){V(e);let i=v();return F(i.dismissModal())}),d(2),o(3,"translate"),r()}n&2&&(f("aria-label",s(1,2,"form.button_close")),t(2),u(" ",s(3,4,"form.button_close")," "))}function Je(n,h){if(n&1){let e=P();a(0,"button",31),_("click",function(){V(e);let i=v();return F(i.enable2fa())}),d(1),o(2,"translate"),r()}if(n&2){let e=v();E("disabled",e.formGroup.invalid),t(),u(" ",s(2,2,"form.button_continue")," ")}}var Te=(()=>{class n{$activeModal=p(N);$api=p(A);$toastr=p(I);$translate=p(B);modalData=p(O);user=this.modalData.user;timeDiffError=U(null);otpString=U(void 0);otpSecret=U(void 0);secretCopied=U(!1);copyTimeout=null;formGroup=new G({code:new S("",[y.required,y.minLength(6),y.maxLength(6)])});ngOnInit(){this.initialize()}initialize(){return w(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 w(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 w(this,null,function*(){let e=this.otpSecret();e&&(yield navigator.clipboard.writeText(e),this.secretCopied.set(!0),this.copyTimeout&&clearTimeout(this.copyTimeout),this.copyTimeout=setTimeout(()=>{this.secretCopied.set(!1)},3e3))})}dismissModal(){this.$activeModal.dismiss("Dismiss")}checkTimeDiff(e){let l=(0,$e.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=D({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&&(a(0,"div",0)(1,"div",1)(2,"h5",2),d(3),o(4,"translate"),r(),a(5,"button",3),o(6,"translate"),_("click",function(){return i.dismissModal()}),r()(),a(7,"div",4)(8,"div",5),m(9,"i",6),r(),a(10,"ul",7)(11,"li"),d(12),o(13,"translate"),r(),x(14,Pe,3,3,"li"),r(),x(15,qe,7,10,"ngb-alert",8)(16,Oe,12,8,"ul",9),r(),a(17,"div",10)(18,"div",11),x(19,ze,4,6,"button",12),r(),a(20,"div",13),x(21,He,4,6,"button",12),r(),a(22,"div",14),x(23,Je,3,4,"button",15),r()()()),l&2&&(t(3),b(s(4,8,"users.setup_2fa")),t(2),f("aria-label",s(6,10,"form.button_close")),t(7),b(s(13,12,"users.setup_2fa_warning")),t(2),C(i.timeDiffError()?-1:14),t(),C(i.timeDiffError()?15:16),t(4),C(i.timeDiffError()?-1:19),t(2),C(i.timeDiffError()?21:-1),t(2),C(i.timeDiffError()?-1:23))},dependencies:[se,Ue,L,q,j,ye,R,ne,z,M],styles:[".qrcode-size[_ngcontent-%COMP%]{width:175px;height:175px}"],changeDetection:0})}return n})();var ke=(()=>{class n{$activeModal=p(N);$api=p(A);$errors=p(W);$toastr=p(I);$translate=p(B);modalData=p(oe);existingUsers=this.modalData.existingUsers;form=new G({username:new S("",{nonNullable:!0,validators:[y.required]}),name:new S("",{nonNullable:!0,validators:[y.required]}),password:new S("",{nonNullable:!0,validators:[y.required,y.minLength(4)]}),passwordConfirm:new S("",{nonNullable:!0,validators:[y.required]}),admin:new S(!0,{nonNullable:!0})},this.matchPassword);ngOnInit(){this.form.controls.username.addValidators(this.duplicateUsernameValidator.bind(this)),this.form.controls.username.updateValueAndValidity()}onSubmit(l){return w(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:!0}:null}matchPassword(e){let l=e.get("passwordConfirm"),i=e.get("password")?.value,c=l?.value,$=H({},l?.errors??{});return delete $.matchPassword,i!==c?(l?.setErrors(Z(H({},$),{matchPassword:!0})),{matchPassword:!0}):(l?.setErrors(Object.keys($).length?$:null),null)}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=D({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&&(a(0,"div",0)(1,"form",1),_("ngSubmit",function(){return i.onSubmit(i.form)}),a(2,"div",2)(3,"h5",3),d(4),o(5,"translate"),r(),a(6,"button",4),o(7,"translate"),_("click",function(){return i.dismissModal()}),r()(),a(8,"div",5)(9,"div",6),m(10,"i",7),r(),a(11,"ul",8)(12,"li",9)(13,"label",10),d(14),o(15,"translate"),m(16,"app-required-indicator"),r(),a(17,"div",11),m(18,"input",12),o(19,"translate"),r()(),a(20,"li",9)(21,"label",13),d(22),o(23,"translate"),m(24,"app-required-indicator"),r(),a(25,"div",11),m(26,"input",14),o(27,"translate"),r()(),a(28,"li",9)(29,"label",15),d(30),o(31,"translate"),m(32,"app-required-indicator"),r(),a(33,"div",11),m(34,"input",16),o(35,"translate"),r()(),a(36,"li",9)(37,"label",17),d(38),o(39,"translate"),m(40,"app-required-indicator"),r(),a(41,"div",11),m(42,"input",18),o(43,"translate"),r()(),a(44,"li",19)(45,"span",20),d(46),o(47,"translate"),m(48,"app-required-indicator"),r(),a(49,"div",21),m(50,"input",22),o(51,"translate"),m(52,"label",23),r()()()(),a(53,"div",24)(54,"div",20)(55,"button",25),_("click",function(){return i.dismissModal()}),d(56),o(57,"translate"),r()(),m(58,"div",26),a(59,"div",27)(60,"button",28),d(61),o(62,"translate"),r()()()()()),l&2&&(t(),E("formGroup",i.form),t(3),b(s(5,24,"users.title_add_user")),t(2),f("aria-label",s(7,26,"form.button_close")),t(8),u(" ",s(15,28,"users.label_username")),t(4),g("is-invalid",i.form.controls.username.touched&&i.form.controls.username.invalid),f("aria-label",s(19,30,"users.label_username")),t(4),u(" ",s(23,32,"users.label_full_name")),t(4),g("is-invalid",i.form.controls.name.touched&&i.form.controls.name.invalid),f("aria-label",s(27,34,"users.label_full_name")),t(4),u(" ",s(31,36,"users.label_password")),t(4),g("is-invalid",i.form.controls.password.touched&&i.form.controls.password.invalid),f("aria-label",s(35,38,"users.label_password")),t(4),u(" ",s(39,40,"users.label_confirm_password")),t(4),g("is-invalid",i.form.controls.passwordConfirm.touched&&i.form.controls.passwordConfirm.invalid),f("aria-label",s(43,42,"users.label_confirm_password")),t(4),b(s(47,44,"users.label_admin_user")),t(4),f("aria-label",s(51,46,"users.label_admin_user")),t(6),u(" ",s(57,48,"form.button_close")," "),t(4),E("disabled",!i.form.valid),t(),u(" ",s(62,50,"form.button_save")," "))},dependencies:[L,ie,q,ee,j,te,R,ae,re,z,M],encapsulation:2,changeDetection:0})}return n})();function Qe(n,h){n&1&&m(0,"app-required-indicator")}function Ke(n,h){if(n&1&&(a(0,"li",9)(1,"label",29),d(2),o(3,"translate"),m(4,"app-required-indicator"),r(),a(5,"div",11),m(6,"input",30),o(7,"translate"),r()()),n&2){let e=v();t(2),u(" ",s(3,4,"users.label_confirm_password")),t(4),g("is-invalid",e.form.controls.passwordConfirm.touched&&e.form.controls.passwordConfirm.invalid),f("aria-label",s(7,6,"users.label_confirm_password"))}}function We(n,h){n&1&&(a(0,"div",22)(1,"div",25),d(2),o(3,"translate"),r()()),n&2&&(t(2),b(s(3,1,"common.phrases.are_you_sure")))}var Be=(()=>{class n{$activeModal=p(N);$api=p(A);$auth=p(K);$errors=p(W);$toastr=p(I);$translate=p(B);modalData=p(O);user=this.modalData.user;existingUsers=this.modalData.existingUsers||[];isCurrentUser=U(!1);deleteMode=U(!1);initialFormValue={};form=new G({username:new S("",{nonNullable:!0,validators:[y.required]}),name:new S("",{nonNullable:!0,validators:[y.required]}),password:new S("",{nonNullable:!0,validators:[y.minLength(4)]}),passwordConfirm:new S("",{nonNullable:!0}),admin:new S(!0,{nonNullable:!0})},this.matchPassword);isLastAdmin=me(()=>this.user?.admin?this.existingUsers.filter(l=>l.admin).length<=1:!1);canDelete=me(()=>!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 w(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?!1: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:!0}:null}dismissModal(){this.$activeModal.dismiss("Dismiss")}matchPassword(e){let l=e.get("passwordConfirm"),i=e.get("password")?.value,c=l?.value,$=H({},l?.errors??{});return delete $.matchPassword,i!==c?(l?.setErrors(Z(H({},$),{matchPassword:!0})),{matchPassword:!0}):(l?.setErrors(Object.keys($).length?$:null),null)}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=D({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&&(a(0,"div",0)(1,"form",1),_("ngSubmit",function(){return i.onSubmit(i.form)}),a(2,"div",2)(3,"h5",3),d(4),o(5,"translate"),r(),a(6,"button",4),o(7,"translate"),_("click",function(){return i.dismissModal()}),r()(),a(8,"div",5)(9,"div",6),m(10,"i",7),r(),a(11,"ul",8)(12,"li",9)(13,"label",10),d(14),o(15,"translate"),m(16,"app-required-indicator"),r(),a(17,"div",11),m(18,"input",12),o(19,"translate"),r()(),a(20,"li",9)(21,"label",13),d(22),o(23,"translate"),m(24,"app-required-indicator"),r(),a(25,"div",11),m(26,"input",14),o(27,"translate"),r()(),a(28,"li",9)(29,"label",15),d(30),o(31,"translate"),x(32,Qe,1,0,"app-required-indicator"),r(),a(33,"div",11),m(34,"input",16),o(35,"translate"),r()(),x(36,Ke,8,8,"li",9),a(37,"li",17)(38,"span",18),d(39),o(40,"translate"),m(41,"app-required-indicator"),r(),a(42,"div",19),m(43,"input",20),o(44,"translate"),m(45,"label",21),r()()(),x(46,We,4,3,"div",22),r(),a(47,"div",23)(48,"div",18)(49,"button",24),_("click",function(){return i.dismissModal()}),d(50),o(51,"translate"),r()(),m(52,"div",25),a(53,"div",26)(54,"button",27),o(55,"translate"),_("click",function($){return i.toggleDeleteMode($)}),m(56,"i"),r(),a(57,"button",28),d(58),o(59,"translate"),r()()()()()),l&2&&(t(),E("formGroup",i.form),t(3),b(s(5,35,"users.title_edit_user")),t(2),f("aria-label",s(7,37,"form.button_close")),t(5),g("opacity-muted",i.deleteMode())("mb-0",!i.deleteMode())("mb-4",i.deleteMode()),t(3),u(" ",s(15,39,"users.label_username")),t(4),g("is-invalid",i.form.controls.username.touched&&i.form.controls.username.invalid),f("aria-label",s(19,41,"users.label_username")),t(4),u(" ",s(23,43,"users.label_full_name")),t(4),g("is-invalid",i.form.controls.name.touched&&i.form.controls.name.invalid),f("aria-label",s(27,45,"users.label_full_name")),t(4),u(" ",s(31,47,"users.label_new_password")," "),t(2),C(i.form.controls.password.value?32:-1),t(2),g("is-invalid",i.form.controls.password.touched&&i.form.controls.password.invalid),f("aria-label",s(35,49,"users.label_new_password")),t(2),C(i.form.controls.password.value?36:-1),t(3),b(s(40,51,"users.label_admin_user")),t(4),f("aria-label",s(44,53,"users.label_admin_user")),t(3),C(i.deleteMode()?46:-1),t(4),u(" ",s(51,55,"form.button_close")," "),t(4),E("disabled",!i.canDelete()),f("aria-label",s(55,57,"users.button_delete_user")),t(2),de(i.deleteMode()?"fas fa-undo":"fas fa-trash"),t(),de(`btn ${i.deleteMode()?"btn-danger":"btn-primary"}`),E("disabled",!i.deleteMode()&&(!i.form.valid||i.isFormUnchanged())),t(),u(" ",s(59,59,i.deleteMode()?"form.button_delete":"form.button_save")," "))},dependencies:[L,ie,q,ee,j,te,R,ae,re,z,M],encapsulation:2,changeDetection:0})}return n})();var Ie=(()=>{class n{$activeModal=p(N);dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=D({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&&(a(0,"div",0)(1,"form")(2,"div",1)(3,"h5",2),d(4),o(5,"translate"),r(),a(6,"button",3),o(7,"translate"),_("click",function(){return i.dismissModal()}),r()(),a(8,"div",4)(9,"div",5),m(10,"i",6),r(),a(11,"h5",7),d(12),o(13,"translate"),r(),a(14,"ul",8)(15,"li"),d(16),o(17,"translate"),r(),a(18,"ul",9)(19,"li"),d(20),o(21,"translate"),r(),a(22,"li"),d(23),o(24,"translate"),r(),a(25,"li"),d(26),o(27,"translate"),o(28,"translate"),r(),a(29,"li"),d(30),o(31,"translate"),r(),a(32,"li"),d(33),o(34,"translate"),r()(),a(35,"li"),d(36),o(37,"translate"),r()(),m(38,"app-support-banner"),r(),a(39,"div",10),m(40,"div",11),a(41,"div",12)(42,"button",13),_("click",function(){return i.dismissModal()}),d(43),o(44,"translate"),r()(),m(45,"div",14),r()()()),l&2&&(t(4),b(s(5,12,"support.title")),t(2),f("aria-label",s(7,14,"form.button_close")),t(6),b(s(13,16,"users.title_users")),t(4),b(s(17,18,"users.support.acc_1")),t(4),b(s(21,20,"menu.label_status")),t(3),b(s(24,22,"menu.label_plugins")),t(3),ve("",s(27,24,"menu.label_accessories")," (",s(28,26,"users.support.control"),")"),t(4),b(s(31,28,"menu.linux.label_logs")),t(3),b(s(34,30,"support.title")),t(3),b(s(37,32,"users.support.acc_2")),t(7),u(" ",s(44,34,"form.button_close")," "))},dependencies:[De,M],encapsulation:2,changeDetection:0})}return n})();function Xe(n,h){if(n&1){let e=P();T(0,"button",21),Q("click",function(){V(e);let i=v(2).$implicit,c=v();return F(c.disable2fa(i))}),d(1),o(2,"translate"),k()}if(n&2){let e=v(2).$implicit,l=v();le("disabled",e.username!==l.username),t(),u(" ",s(2,2,"users.setup_2fa_disable")," ")}}function Ye(n,h){if(n&1){let e=P();T(0,"button",22),Q("click",function(){V(e);let i=v(2).$implicit,c=v();return F(c.setup2fa(i))}),d(1),o(2,"translate"),k()}if(n&2){let e=v(2).$implicit,l=v();le("disabled",e.username!==l.username),t(),u(" ",s(2,2,"users.setup_2fa")," ")}}function Ze(n,h){if(n&1&&x(0,Xe,3,4,"button",19)(1,Ye,3,4,"button",20),n&2){let e=v().$implicit;C(e.otpActive?0:1)}}function et(n,h){n&1&&J(0,"div")}function tt(n,h){if(n&1){let e=P();T(0,"div",9)(1,"div",10)(2,"div",11)(3,"div",12)(4,"span",13)(5,"h4"),d(6),k(),T(7,"h5",14),J(8,"i",15),d(9),k()()(),T(10,"div",16),x(11,Ze,2,1)(12,et,1,0,"div"),T(13,"div")(14,"button",17),o(15,"translate"),Q("click",function(){let i=V(e).$implicit,c=v();return F(c.openEditUser(i))}),J(16,"i",18),k()()()()()()}if(n&2){let e=h.$implicit;t(6),b(e.name),t(2),g("fa-user-secret",e.admin)("fa-user",!e.admin),t(),u(" ",e.username," "),t(2),C(e.admin?11:12),t(3),f("aria-label",s(15,8,"form.button_edit"))}}var Mi=(()=>{class n{injector=p(ce);destroyRef=p(ue);$api=p(A);$auth=p(K);$errors=p(W);$modal=p(Se);$route=p(ge);$settings=p(we);$toastr=p(I);$translate=p(B);homebridgeUsers=U([]);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(Ce(this.destroyRef)).subscribe(l=>{this.homebridgeUsers.set(l.homebridgeUsers??[])})}reloadUsers(){return w(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 w(this,null,function*(){let e=X([{provide:oe,useValue:{existingUsers:this.homebridgeUsers()}}],this.injector),l=this.$modal.open(ke,{size:"lg",backdrop:"static",injector:e});try{yield l.result,this.reloadUsers()}catch(i){}})}openEditUser(e){return w(this,null,function*(){let l=X([{provide:O,useValue:{user:e,existingUsers:this.homebridgeUsers()}}],this.injector),i=this.$modal.open(Be,{size:"lg",backdrop:"static",injector:l});try{yield i.result,this.reloadUsers()}catch(c){}})}setup2fa(e){return w(this,null,function*(){let l=X([{provide:O,useValue:{user:e}}],this.injector),i=this.$modal.open(Te,{size:"lg",backdrop:"static",injector:l});try{yield i.result,this.reloadUsers()}catch(c){}})}disable2fa(e){return w(this,null,function*(){let l=X([{provide:O,useValue:{user:e}}],this.injector),i=this.$modal.open(Me,{size:"lg",backdrop:"static",injector:l});try{yield i.result,this.reloadUsers()}catch(c){}})}openSupport(){this.$modal.open(Ie,{size:"lg",backdrop:"static"})}static \u0275fac=function(l){return new(l||n)};static \u0275cmp=D({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&&(T(0,"div",0)(1,"div",1)(2,"h3",2),d(3),o(4,"translate"),k()(),T(5,"div",3)(6,"button",4),o(7,"translate"),Q("click",function(){return i.openAddNewUser()}),J(8,"i",5),k(),T(9,"button",6),o(10,"translate"),Q("click",function(){return i.openSupport()}),J(11,"i",7),k()()(),T(12,"div",8),be(13,tt,17,10,"div",9,fe),k()),l&2&&(t(3),b(s(4,3,"users.title_users")),t(3),f("aria-label",s(7,5,"users.button_add_user")),t(3),f("aria-label",s(10,7,"support.title")),t(4),_e(i.homebridgeUsers()))},dependencies:[M],encapsulation:2,changeDetection:0})}return n})();export{Mi as UsersComponent};