homebridge-config-ui-x
Version:
A web based management, configuration and control platform for Homebridge.
1 lines • 31.6 kB
JavaScript
import{a as E,i as D,o as w,s as x}from"./chunk-D39XL-zh.js";import{$ as Le$1,Ct as Qo,E as Dy,Fr as se,Gr as uy,It as TT,Jr as ve,K as J,Kr as v3,Ln as db,M as Fe,Pr as sc,Q as Ko,Rt as Te$1,Tn as ac,Un as g,Vt as U3,X as Jt,Y as Je$1,Yr as vy,Yt as Va,Zr as w_,ai as xi,br as pb,d as Ay,dt as Nf,fn as Z,gt as Pe$1,hn as _T,hr as nc,it as Mi,jt as S_,kn as br,kt as ST,or as jy,pt as Ot,ri as x_,rr as jd,sr as kt,u as An,ui as z0,ut as N_,vt as Py,wr as q,x as Cr}from"./chunk-D96TCRAL.js";import{a as W}from"./chunk-DZYp0NQB.js";import{n as zt,t as bt}from"./chunk-CdJ3i4Aq.js";import{B as Hn,G as Mt,H as Jn,I as $,K as Se,R as Cn,U as Kn,W as Ln,Y as Ye$1,Z as _n,ct as zt$1,ft as he,lt as fe,n as X,nt as mn,ot as ve$1,pt as j,st as zn,t as m,ut as si}from"./main-E3N63CH7.js";import{_ as d,g as c}from"./chunk-nWnpef0a.js";import{t as pr}from"./chunk-CyjdE5Hm2.js";import{t as y}from"./chunk-BQyh1Wug.js";import{t as c$1}from"./chunk-C4clUPas.js";function Pe(n,h){n&1&&(Va(0,`ngb-alert`,13)(1,`p`,20),Ot(2),S_(3,`translate`),jd()()),n&2&&(vy(`dismissible`,!1),se(2),Py(N_(3,2,`login.invalid_password`)))}var Te=(()=>{class n{$activeModal=g(fe);$api=g(U3);$auth=g(he);$notification=g(j);$toastr=g(z0);$translate=g(Nf);invalidCredentials=q(!1);formGroup=new $({password:new Se(``,[ve$1.required])});disable2fa(){return E(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(`profile-update`)}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 ɵfac=function(l){return new(l||n)};static ɵcmp=nc({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&&(Va(0,`div`,0)(1,`div`,1)(2,`h5`,2),Ot(3),S_(4,`translate`),jd(),Va(5,`button`,3),S_(6,`translate`),ac(`click`,function(){return i.dismissModal()}),jd()(),Va(7,`div`,4)(8,`div`,5),Dy(9,`i`,6),jd(),Va(10,`ul`,7)(11,`li`),Ot(12),S_(13,`translate`),jd()(),Va(14,`ul`,8)(15,`li`,9)(16,`label`,10),Ot(17),S_(18,`translate`),Dy(19,`app-required-indicator`),jd(),Va(20,`div`,11),Dy(21,`input`,12),S_(22,`translate`),db(),jd()()(),Fe(23,Pe,4,4,`ngb-alert`,13),jd(),Va(24,`div`,14)(25,`div`,15)(26,`button`,16),S_(27,`translate`),ac(`click`,function(){return i.dismissModal()}),Ot(28),S_(29,`translate`),jd()(),Dy(30,`div`,17),Va(31,`div`,18)(32,`button`,19),ac(`click`,function(){return i.disable2fa()}),Ot(33),S_(34,`translate`),jd()()()()),l&2&&(se(3),Py(N_(4,13,`users.setup_2fa_disable`)),se(2),Cr(`aria-label`,N_(6,15,`form.button_close`)),se(7),Py(N_(13,17,`users.setup_2fa_disable_current_password`)),se(5),kt(` `,N_(18,19,`users.label_password`)),se(4),Ay(`is-invalid`,i.formGroup.controls.password.touched&&i.formGroup.controls.password.invalid),vy(`formControl`,i.formGroup.controls.password)(`placeholder`,N_(22,21,`users.label_password`)),pb(),se(2),Le$1(i.invalidCredentials()&&!i.formGroup.controls.password.value?23:-1),se(3),Cr(`aria-label`,N_(27,23,`form.button_close`)),se(2),kt(` `,N_(29,25,`form.button_close`),` `),se(4),vy(`disabled`,i.formGroup.invalid),se(),kt(` `,N_(34,27,`form.button_continue`),` `))},dependencies:[Kn,Ye$1,Hn,Jn,mn,X,c$1,v3],styles:[`.modal-content-min-h[_ngcontent-%COMP%]{min-height:300px}`]})}return n})();var ke=D(bt(),1);var qe=n=>({timeDiffError:n});function je(n,h){n&1&&(Va(0,`li`),Ot(1),S_(2,`translate`),jd()),n&2&&(se(),Py(N_(2,1,`users.setup_2fa_scan_qr_code`)))}function Ge(n,h){if(n&1&&(Va(0,`ngb-alert`,8)(1,`p`,16),Ot(2),S_(3,`translate`),jd(),Va(4,`p`,17),Ot(5),S_(6,`translate`),jd()()),n&2){let e=ve();vy(`dismissible`,!1),se(2),Py(N_(3,3,`users.setup_2fa_cannot_setup_2fa`)),se(3),Py(x_(6,5,`users.setup_2fa_server_time_out`,w_(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&&(Va(0,`span`,29),Ot(1),S_(2,`translate`),jd()),n&2&&(se(),kt(` `,N_(2,1,`common.a11y.copied`),` `))}function ze(n,h){if(n&1){let e=sc();Va(0,`div`,21),Ot(1),S_(2,`translate`),Dy(3,`br`),Ot(4),Va(5,`button`,26),S_(6,`translate`),ac(`click`,function(){Ko(e);return Qo(ve(2).copySecretToClipboard())}),Fe(7,Le,1,0,`i`,27)(8,Re,1,0,`i`,28),jd(),Fe(9,Oe,3,3,`span`,29),jd()}if(n&2){let e=ve(2);se(),kt(` `,N_(2,5,`users.setup_2fa_scan_qr_manual`)),se(3),kt(` `,e.otpSecret(),` `),se(),Cr(`aria-label`,N_(6,7,`common.a11y.copy_to_clipboard`)),se(2),Le$1(e.secretCopied()?7:8),se(2),Le$1(e.secretCopied()?9:-1)}}function He(n,h){if(n&1&&(Va(0,`ul`,9)(1,`li`,18)(2,`div`,19),Dy(3,`app-qrcode`,20),jd(),Fe(4,ze,10,9,`div`,21),jd(),Va(5,`li`,22)(6,`label`,23),Ot(7),S_(8,`translate`),Dy(9,`app-required-indicator`),jd(),Va(10,`div`,24),Dy(11,`input`,25),db(),jd()()()),n&2){let e=ve();se(3),vy(`data`,e.otpString()),se(),Le$1(e.otpSecret()?4:-1),se(3),kt(` `,N_(8,6,`users.setup_2fa_enter_code`)),se(4),Ay(`is-invalid`,e.formGroup.controls.code.touched&&e.formGroup.controls.code.invalid),vy(`formControl`,e.formGroup.controls.code),pb()}}function Je(n,h){if(n&1){let e=sc();Va(0,`button`,30),S_(1,`translate`),ac(`click`,function(){Ko(e);return Qo(ve().dismissModal())}),Ot(2),S_(3,`translate`),jd()}n&2&&(Cr(`aria-label`,N_(1,2,`form.button_close`)),se(2),kt(` `,N_(3,4,`form.button_close`),` `))}function Qe(n,h){if(n&1){let e=sc();Va(0,`button`,30),S_(1,`translate`),ac(`click`,function(){Ko(e);return Qo(ve().dismissModal())}),Ot(2),S_(3,`translate`),jd()}n&2&&(Cr(`aria-label`,N_(1,2,`form.button_close`)),se(2),kt(` `,N_(3,4,`form.button_close`),` `))}function Ke(n,h){if(n&1){let e=sc();Va(0,`button`,31),ac(`click`,function(){Ko(e);return Qo(ve().enable2fa())}),Ot(1),S_(2,`translate`),jd()}if(n&2)vy(`disabled`,ve().formGroup.invalid),se(),kt(` `,N_(2,2,`form.button_continue`),` `)}var Be=(()=>{class n{$activeModal=g(fe);$api=g(U3);$toastr=g(z0);$translate=g(Nf);modalData=g(c);user=this.modalData.user;timeDiffError=q(null);otpString=q(void 0);otpSecret=q(void 0);secretCopied=q(!1);copyTimeout=null;formGroup=new $({code:new Se(``,[ve$1.required,ve$1.minLength(6),ve$1.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(!0),this.copyTimeout&&clearTimeout(this.copyTimeout),this.copyTimeout=setTimeout(()=>{this.secretCopied.set(!1)},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 ɵfac=function(l){return new(l||n)};static ɵcmp=nc({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&&(Va(0,`div`,0)(1,`div`,1)(2,`h5`,2),Ot(3),S_(4,`translate`),jd(),Va(5,`button`,3),S_(6,`translate`),ac(`click`,function(){return i.dismissModal()}),jd()(),Va(7,`div`,4)(8,`div`,5),Dy(9,`i`,6),jd(),Va(10,`ul`,7)(11,`li`),Ot(12),S_(13,`translate`),jd(),Fe(14,je,3,3,`li`),jd(),Fe(15,Ge,7,10,`ngb-alert`,8)(16,He,12,8,`ul`,9),jd(),Va(17,`div`,10)(18,`div`,11),Fe(19,Je,4,6,`button`,12),jd(),Va(20,`div`,13),Fe(21,Qe,4,6,`button`,12),jd(),Va(22,`div`,14),Fe(23,Ke,3,4,`button`,15),jd()()()),l&2&&(se(3),Py(N_(4,8,`users.setup_2fa`)),se(2),Cr(`aria-label`,N_(6,10,`form.button_close`)),se(7),Py(N_(13,12,`users.setup_2fa_warning`)),se(2),Le$1(i.timeDiffError()?-1:14),se(),Le$1(i.timeDiffError()?15:16),se(4),Le$1(i.timeDiffError()?-1:19),se(2),Le$1(i.timeDiffError()?21:-1),se(2),Le$1(i.timeDiffError()?-1:23))},dependencies:[X,pr,Kn,Ye$1,Hn,zt$1,Jn,mn,c$1,v3],styles:[`.qrcode-size[_ngcontent-%COMP%]{width:175px;height:175px}`]})}return n})();var Ie=(()=>{class n{$activeModal=g(fe);$api=g(U3);$errors=g(m);$toastr=g(z0);$translate=g(Nf);modalData=g(d);existingUsers=this.modalData.existingUsers;form=new $({username:new Se(``,{nonNullable:!0,validators:[ve$1.required]}),name:new Se(``,{nonNullable:!0,validators:[ve$1.required]}),password:new Se(``,{nonNullable:!0,validators:[ve$1.required,ve$1.minLength(4)]}),passwordConfirm:new Se(``,{nonNullable:!0,validators:[ve$1.required]}),admin:new Se(!0,{nonNullable:!0})},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:!0}: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:!0})),{matchPassword:!0}):(l?.setErrors(Object.keys(k).length?k:null),null)}static ɵfac=function(l){return new(l||n)};static ɵcmp=nc({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&&(Va(0,`div`,0)(1,`form`,1),ac(`ngSubmit`,function(){return i.onSubmit(i.form)}),Va(2,`div`,2)(3,`h5`,3),Ot(4),S_(5,`translate`),jd(),Va(6,`button`,4),S_(7,`translate`),ac(`click`,function(){return i.dismissModal()}),jd()(),Va(8,`div`,5)(9,`div`,6),Dy(10,`i`,7),jd(),Va(11,`ul`,8)(12,`li`,9)(13,`label`,10),Ot(14),S_(15,`translate`),Dy(16,`app-required-indicator`),jd(),Va(17,`div`,11),Dy(18,`input`,12),S_(19,`translate`),db(),jd()(),Va(20,`li`,9)(21,`label`,13),Ot(22),S_(23,`translate`),Dy(24,`app-required-indicator`),jd(),Va(25,`div`,11),Dy(26,`input`,14),S_(27,`translate`),db(),jd()(),Va(28,`li`,9)(29,`label`,15),Ot(30),S_(31,`translate`),Dy(32,`app-required-indicator`),jd(),Va(33,`div`,11),Dy(34,`input`,16),S_(35,`translate`),db(),jd()(),Va(36,`li`,9)(37,`label`,17),Ot(38),S_(39,`translate`),Dy(40,`app-required-indicator`),jd(),Va(41,`div`,11),Dy(42,`input`,18),S_(43,`translate`),db(),jd()(),Va(44,`li`,19)(45,`span`,20),Ot(46),S_(47,`translate`),Dy(48,`app-required-indicator`),jd(),Va(49,`div`,21),Dy(50,`input`,22),S_(51,`translate`),db(),Dy(52,`label`,23),jd()()()(),Va(53,`div`,24)(54,`div`,20)(55,`button`,25),ac(`click`,function(){return i.dismissModal()}),Ot(56),S_(57,`translate`),jd()(),Dy(58,`div`,26),Va(59,`div`,27)(60,`button`,28),Ot(61),S_(62,`translate`),jd()()()()()),l&2&&(se(),vy(`formGroup`,i.form),se(3),Py(N_(5,24,`users.title_add_user`)),se(2),Cr(`aria-label`,N_(7,26,`form.button_close`)),se(8),kt(` `,N_(15,28,`users.label_username`)),se(4),Ay(`is-invalid`,i.form.controls.username.touched&&i.form.controls.username.invalid),Cr(`aria-label`,N_(19,30,`users.label_username`)),pb(),se(4),kt(` `,N_(23,32,`users.label_full_name`)),se(4),Ay(`is-invalid`,i.form.controls.name.touched&&i.form.controls.name.invalid),Cr(`aria-label`,N_(27,34,`users.label_full_name`)),pb(),se(4),kt(` `,N_(31,36,`users.label_password`)),se(4),Ay(`is-invalid`,i.form.controls.password.touched&&i.form.controls.password.invalid),Cr(`aria-label`,N_(35,38,`users.label_password`)),pb(),se(4),kt(` `,N_(39,40,`users.label_confirm_password`)),se(4),Ay(`is-invalid`,i.form.controls.passwordConfirm.touched&&i.form.controls.passwordConfirm.invalid),Cr(`aria-label`,N_(43,42,`users.label_confirm_password`)),pb(),se(4),Py(N_(47,44,`users.label_admin_user`)),se(4),Cr(`aria-label`,N_(51,46,`users.label_admin_user`)),pb(),se(6),kt(` `,N_(57,48,`form.button_close`),` `),se(4),vy(`disabled`,!i.form.valid),se(),kt(` `,N_(62,50,`form.button_save`),` `))},dependencies:[Kn,zn,Ye$1,Mt,Hn,Ln,Jn,Cn,_n,c$1,v3],encapsulation:2})}return n})();function We(n,h){n&1&&Dy(0,`app-required-indicator`)}function Xe(n,h){if(n&1&&(Va(0,`li`,9)(1,`label`,29),Ot(2),S_(3,`translate`),Dy(4,`app-required-indicator`),jd(),Va(5,`div`,11),Dy(6,`input`,30),S_(7,`translate`),db(),jd()()),n&2){let e=ve();se(2),kt(` `,N_(3,4,`users.label_confirm_password`)),se(4),Ay(`is-invalid`,e.form.controls.passwordConfirm.touched&&e.form.controls.passwordConfirm.invalid),Cr(`aria-label`,N_(7,6,`users.label_confirm_password`)),pb()}}function Ye(n,h){n&1&&(Va(0,`div`,22)(1,`div`,25),Ot(2),S_(3,`translate`),jd()()),n&2&&(se(2),Py(N_(3,1,`common.phrases.are_you_sure`)))}var Ae=(()=>{class n{$activeModal=g(fe);$api=g(U3);$auth=g(he);$errors=g(m);$toastr=g(z0);$translate=g(Nf);modalData=g(c);user=this.modalData.user;existingUsers=this.modalData.existingUsers||[];isCurrentUser=q(!1);deleteMode=q(!1);initialFormValue={};form=new $({username:new Se(``,{nonNullable:!0,validators:[ve$1.required]}),name:new Se(``,{nonNullable:!0,validators:[ve$1.required]}),password:new Se(``,{nonNullable:!0,validators:[ve$1.minLength(4)]}),passwordConfirm:new Se(``,{nonNullable:!0}),admin:new Se(!0,{nonNullable:!0})},this.matchPassword);isLastAdmin=J(()=>this.user?.admin?this.existingUsers.filter(l=>l.admin).length<=1:!1);canDelete=J(()=>!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?!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,k=w({},l?.errors??{});return delete k.matchPassword,i!==c?(l?.setErrors(x(w({},k),{matchPassword:!0})),{matchPassword:!0}):(l?.setErrors(Object.keys(k).length?k:null),null)}static ɵfac=function(l){return new(l||n)};static ɵcmp=nc({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&&(Va(0,`div`,0)(1,`form`,1),ac(`ngSubmit`,function(){return i.onSubmit(i.form)}),Va(2,`div`,2)(3,`h5`,3),Ot(4),S_(5,`translate`),jd(),Va(6,`button`,4),S_(7,`translate`),ac(`click`,function(){return i.dismissModal()}),jd()(),Va(8,`div`,5)(9,`div`,6),Dy(10,`i`,7),jd(),Va(11,`ul`,8)(12,`li`,9)(13,`label`,10),Ot(14),S_(15,`translate`),Dy(16,`app-required-indicator`),jd(),Va(17,`div`,11),Dy(18,`input`,12),S_(19,`translate`),db(),jd()(),Va(20,`li`,9)(21,`label`,13),Ot(22),S_(23,`translate`),Dy(24,`app-required-indicator`),jd(),Va(25,`div`,11),Dy(26,`input`,14),S_(27,`translate`),db(),jd()(),Va(28,`li`,9)(29,`label`,15),Ot(30),S_(31,`translate`),Fe(32,We,1,0,`app-required-indicator`),jd(),Va(33,`div`,11),Dy(34,`input`,16),S_(35,`translate`),db(),jd()(),Fe(36,Xe,8,8,`li`,9),Va(37,`li`,17)(38,`span`,18),Ot(39),S_(40,`translate`),Dy(41,`app-required-indicator`),jd(),Va(42,`div`,19),Dy(43,`input`,20),S_(44,`translate`),db(),Dy(45,`label`,21),jd()()(),Fe(46,Ye,4,3,`div`,22),jd(),Va(47,`div`,23)(48,`div`,18)(49,`button`,24),ac(`click`,function(){return i.dismissModal()}),Ot(50),S_(51,`translate`),jd()(),Dy(52,`div`,25),Va(53,`div`,26)(54,`button`,27),S_(55,`translate`),ac(`click`,function(k){return i.toggleDeleteMode(k)}),Dy(56,`i`),jd(),Va(57,`button`,28),Ot(58),S_(59,`translate`),jd()()()()()),l&2&&(se(),vy(`formGroup`,i.form),se(3),Py(N_(5,35,`users.title_edit_user`)),se(2),Cr(`aria-label`,N_(7,37,`form.button_close`)),se(5),Ay(`opacity-muted`,i.deleteMode())(`mb-0`,!i.deleteMode())(`mb-4`,i.deleteMode()),se(3),kt(` `,N_(15,39,`users.label_username`)),se(4),Ay(`is-invalid`,i.form.controls.username.touched&&i.form.controls.username.invalid),Cr(`aria-label`,N_(19,41,`users.label_username`)),pb(),se(4),kt(` `,N_(23,43,`users.label_full_name`)),se(4),Ay(`is-invalid`,i.form.controls.name.touched&&i.form.controls.name.invalid),Cr(`aria-label`,N_(27,45,`users.label_full_name`)),pb(),se(4),kt(` `,N_(31,47,`users.label_new_password`),` `),se(2),Le$1(i.form.controls.password.value?32:-1),se(2),Ay(`is-invalid`,i.form.controls.password.touched&&i.form.controls.password.invalid),Cr(`aria-label`,N_(35,49,`users.label_new_password`)),pb(),se(2),Le$1(i.form.controls.password.value?36:-1),se(3),Py(N_(40,51,`users.label_admin_user`)),se(4),Cr(`aria-label`,N_(44,53,`users.label_admin_user`)),pb(),se(3),Le$1(i.deleteMode()?46:-1),se(4),kt(` `,N_(51,55,`form.button_close`),` `),se(4),vy(`disabled`,!i.canDelete()),Cr(`aria-label`,N_(55,57,`users.button_delete_user`)),se(2),Jt(i.deleteMode()?`fas fa-undo`:`fas fa-trash`),se(),Jt(`btn ${i.deleteMode()?`btn-danger`:`btn-primary`}`),vy(`disabled`,!i.deleteMode()&&(!i.form.valid||i.isFormUnchanged())),se(),kt(` `,N_(59,59,i.deleteMode()?`form.button_delete`:`form.button_save`),` `))},dependencies:[Kn,zn,Ye$1,Mt,Hn,Ln,Jn,Cn,_n,c$1,v3],encapsulation:2})}return n})();var Ne=(()=>{class n{$activeModal=g(fe);dismissModal(){this.$activeModal.dismiss(`Dismiss`)}static ɵfac=function(l){return new(l||n)};static ɵcmp=nc({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&&(Va(0,`div`,0)(1,`form`)(2,`div`,1)(3,`h5`,2),Ot(4),S_(5,`translate`),jd(),Va(6,`button`,3),S_(7,`translate`),ac(`click`,function(){return i.dismissModal()}),jd()(),Va(8,`div`,4)(9,`div`,5),Dy(10,`i`,6),jd(),Va(11,`h5`,7),Ot(12),S_(13,`translate`),jd(),Va(14,`ul`,8)(15,`li`),Ot(16),S_(17,`translate`),jd(),Va(18,`ul`,9)(19,`li`),Ot(20),S_(21,`translate`),jd(),Va(22,`li`),Ot(23),S_(24,`translate`),jd(),Va(25,`li`),Ot(26),S_(27,`translate`),S_(28,`translate`),jd(),Va(29,`li`),Ot(30),S_(31,`translate`),jd(),Va(32,`li`),Ot(33),S_(34,`translate`),jd()(),Va(35,`li`),Ot(36),S_(37,`translate`),jd()(),Dy(38,`app-support-banner`),jd(),Va(39,`div`,10),Dy(40,`div`,11),Va(41,`div`,12)(42,`button`,13),ac(`click`,function(){return i.dismissModal()}),Ot(43),S_(44,`translate`),jd()(),Dy(45,`div`,14),jd()()()),l&2&&(se(4),Py(N_(5,12,`support.title`)),se(2),Cr(`aria-label`,N_(7,14,`form.button_close`)),se(6),Py(N_(13,16,`users.title_users`)),se(4),Py(N_(17,18,`users.support.acc_1`)),se(4),Py(N_(21,20,`menu.label_status`)),se(3),Py(N_(24,22,`menu.label_plugins`)),se(3),jy(``,N_(27,24,`menu.label_accessories`),` (`,N_(28,26,`users.support.control`),`)`),se(4),Py(N_(31,28,`menu.linux.label_logs`)),se(3),Py(N_(34,30,`support.title`)),se(3),Py(N_(37,32,`users.support.acc_2`)),se(7),kt(` `,N_(44,34,`form.button_close`),` `))},dependencies:[y,v3],encapsulation:2})}return n})();function Ze(n,h){if(n&1){let e=sc();Pe$1(0,`button`,21),xi(`click`,function(){Ko(e);let i=ve(2).$implicit;return Qo(ve().disable2fa(i))}),Ot(1),S_(2,`translate`),Je$1()}if(n&2){let e=ve(2).$implicit,l=ve();Mi(`disabled`,e.username!==l.username),se(),kt(` `,N_(2,2,`users.setup_2fa_disable`),` `)}}function et(n,h){if(n&1){let e=sc();Pe$1(0,`button`,22),xi(`click`,function(){Ko(e);let i=ve(2).$implicit;return Qo(ve().setup2fa(i))}),Ot(1),S_(2,`translate`),Je$1()}if(n&2){let e=ve(2).$implicit,l=ve();Mi(`disabled`,e.username!==l.username),se(),kt(` `,N_(2,2,`users.setup_2fa`),` `)}}function tt(n,h){if(n&1&&Fe(0,Ze,3,4,`button`,19)(1,et,3,4,`button`,20),n&2){let e=ve().$implicit;Le$1(e.otpActive?0:1)}}function it(n,h){n&1&&br(0,`div`)}function nt(n,h){if(n&1){let e=sc();Pe$1(0,`div`,9)(1,`div`,10)(2,`div`,11)(3,`div`,12)(4,`span`,13)(5,`h4`),Ot(6),Je$1(),Pe$1(7,`h5`,14),br(8,`i`,15),Ot(9),Je$1()()(),Pe$1(10,`div`,16),Fe(11,tt,2,1)(12,it,1,0,`div`),Pe$1(13,`div`)(14,`button`,17),S_(15,`translate`),xi(`click`,function(){let i=Ko(e).$implicit;return Qo(ve().openEditUser(i))}),br(16,`i`,18),Je$1()()()()()()}if(n&2){let e=h.$implicit;se(6),Py(e.name),se(2),Ay(`fa-user-secret`,e.admin)(`fa-user`,!e.admin),se(),kt(` `,e.username,` `),se(2),Le$1(e.admin?11:12),se(3),Cr(`aria-label`,N_(15,8,`form.button_edit`))}}var Ti=(()=>{class n{injector=g(Te$1);destroyRef=g(Z);$api=g(U3);$auth=g(he);$errors=g(m);$modal=g(si);$route=g(W);$settings=g(zt);$toastr=g(z0);$translate=g(Nf);homebridgeUsers=q([]);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=uy([{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=uy([{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=uy([{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=uy([{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 ɵfac=function(l){return new(l||n)};static ɵcmp=nc({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&&(Pe$1(0,`div`,0)(1,`div`,1)(2,`h3`,2),Ot(3),S_(4,`translate`),Je$1()(),Pe$1(5,`div`,3)(6,`button`,4),S_(7,`translate`),xi(`click`,function(){return i.openAddNewUser()}),br(8,`i`,5),Je$1(),Pe$1(9,`button`,6),S_(10,`translate`),xi(`click`,function(){return i.openSupport()}),br(11,`i`,7),Je$1()()(),Pe$1(12,`div`,8),_T(13,nt,17,10,`div`,9,TT),Je$1()),l&2&&(se(3),Py(N_(4,3,`users.title_users`)),se(3),Cr(`aria-label`,N_(7,5,`users.button_add_user`)),se(3),Cr(`aria-label`,N_(10,7,`support.title`)),se(4),ST(i.homebridgeUsers()))},dependencies:[v3],encapsulation:2})}return n})();export{Ti as UsersComponent};