homebridge-config-ui-x 4.78.2-beta.9 → 4.79.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -6
- package/dist/modules/status/status.service.js +9 -0
- package/dist/modules/status/status.service.js.map +1 -1
- package/package.json +3 -3
- package/public/assets/hap-icons/doorbell.svg +17 -0
- package/public/assets/hap-icons/microphone.svg +22 -0
- package/public/assets/hap-icons/speaker.svg +27 -12
- package/public/{chunk-URB6RLTT.js → chunk-2IBWWARU.js} +1 -1
- package/public/{chunk-HXEALMTX.js → chunk-3V3UWE5A.js} +1 -1
- package/public/{chunk-H2Q7I4NK.js → chunk-5IHI4JPS.js} +1 -1
- package/public/{chunk-FUQO62GC.js → chunk-63UUDTSE.js} +1 -1
- package/public/{chunk-OJ7RLRXT.js → chunk-6BERX4YF.js} +1 -1
- package/public/{chunk-4CAEG4FN.js → chunk-76CU25ZK.js} +1 -1
- package/public/{chunk-4VQOBSTS.js → chunk-A2RA4YA5.js} +1 -1
- package/public/{chunk-WHQQA3BC.js → chunk-AQGBEZCF.js} +1 -1
- package/public/{chunk-LQ5XI7PH.js → chunk-BDOCQMFI.js} +1 -1
- package/public/{chunk-4EOWKGS5.js → chunk-BNEWU4G2.js} +1 -1
- package/public/{chunk-EWY3FQR2.js → chunk-BOHJERJS.js} +1 -1
- package/public/{chunk-E6C35ANJ.js → chunk-CCVSU5Q2.js} +1 -1
- package/public/{chunk-NDPLSN2D.js → chunk-COFGKPMD.js} +1 -1
- package/public/{chunk-2MYGHBCM.js → chunk-CX74C4IG.js} +1 -1
- package/public/{chunk-ROD4T2CM.js → chunk-DMLSZLTL.js} +1 -1
- package/public/{chunk-PWL42RKY.js → chunk-FIEMRUA3.js} +1 -1
- package/public/{chunk-ZLO3MSCJ.js → chunk-FIVNX6XW.js} +1 -1
- package/public/{chunk-RPXUM5K2.js → chunk-HUOV4LKQ.js} +1 -1
- package/public/{chunk-MKTP4XOX.js → chunk-JSXMXWXD.js} +1 -1
- package/public/{chunk-3FAQKTF4.js → chunk-JZGFPSRH.js} +1 -1
- package/public/{chunk-JD5I7S4V.js → chunk-K2WNN2UC.js} +1 -1
- package/public/{chunk-O4HR6C67.js → chunk-LBJ652OA.js} +1 -1
- package/public/{chunk-PJQIMQZP.js → chunk-LCVO7RMH.js} +1 -1
- package/public/chunk-LCW6VVUL.js +4 -0
- package/public/chunk-LDCYGGLN.js +12 -0
- package/public/{chunk-IOOIBANV.js → chunk-LG5SJQQG.js} +1 -1
- package/public/{chunk-JYBTER4A.js → chunk-LK7KOGU3.js} +1 -1
- package/public/{chunk-V7EA73XV.js → chunk-LKXEBBZH.js} +1 -1
- package/public/{chunk-LGEMUUBP.js → chunk-LTTGOCL3.js} +1 -1
- package/public/{chunk-TQL32BTE.js → chunk-M6P3SI2J.js} +1 -1
- package/public/{chunk-SNQS667C.js → chunk-MSJ4FDVW.js} +1 -1
- package/public/{chunk-DCR7444I.js → chunk-MSXLY5GL.js} +1 -1
- package/public/{chunk-XCQC3XK6.js → chunk-OCJGUIW2.js} +1 -1
- package/public/{chunk-VZX2S4ZZ.js → chunk-OGEM76NM.js} +1 -1
- package/public/{chunk-3DETIAPU.js → chunk-PCUE2CWJ.js} +1 -1
- package/public/{chunk-WJ77V4EB.js → chunk-S6JBR3LV.js} +1 -1
- package/public/chunk-SJ5LU5VY.js +1 -0
- package/public/chunk-TXQYIDCS.js +1 -0
- package/public/chunk-UW7XZ646.js +1 -0
- package/public/{chunk-F3DK6724.js → chunk-VNEQ22RC.js} +1 -1
- package/public/{chunk-TXF72ANW.js → chunk-XDQ7NXPL.js} +1 -1
- package/public/{chunk-U6MXFYEN.js → chunk-YHCWXVOH.js} +1 -1
- package/public/{chunk-QXDUZYIF.js → chunk-YQKD6BY7.js} +1 -1
- package/public/{chunk-H7HI7Z2I.js → chunk-ZC3OSQNN.js} +1 -1
- package/public/index.html +2 -2
- package/public/main-BZ5GZLDT.js +1 -0
- package/public/{styles-YDIK2EDN.css → styles-ZKWHTEN5.css} +1 -1
- package/public/chunk-4HJCROCG.js +0 -1
- package/public/chunk-E2UX6425.js +0 -4
- package/public/chunk-O5HD4H2P.js +0 -12
- package/public/chunk-RGH5FX6U.js +0 -1
- package/public/chunk-WJEDAPKZ.js +0 -1
- package/public/main-HBWLADWE.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as ne}from"./chunk-7EQ4BJZB.js";import{g as O,m as G,n as te}from"./chunk-CF2ZN7LY.js";import{A,b as Z,c as I,d as x,e as F,f as P,g as V,j as w,m as z,o as q,p as R,q as L,x as ee,z as N}from"./chunk-T252YJXA.js";import{b as Q}from"./chunk-QXDUZYIF.js";import{b as ie}from"./chunk-X7PVYZAE.js";import{a as ce}from"./chunk-URB6RLTT.js";import{k as U,n as k}from"./chunk-WJEDAPKZ.js";import{a as S,b as $}from"./chunk-LXXELGX4.js";import"./chunk-SRP6QX5M.js";import{Bc as o,Cc as s,Dc as Y,Hb as u,Ib as h,Jb as g,Lb as K,Mb as W,Nb as X,Ob as f,Pb as i,Qb as n,Rb as d,Vb as M,Yb as b,Zb as v,ab as e,cd as j,g as pe,kc as m,la as c,lc as p,mb as E,mc as C,ra as B,sa as T,xc as D}from"./chunk-SKZUTSHE.js";function ue(r,y){r&1&&(i(0,"ngb-alert",13)(1,"p",20),m(2),o(3,"translate"),n()()),r&2&&(f("dismissible",!1),e(2),p(s(3,2,"login.invalid_password")))}var re=(()=>{class r{$activeModal=c(G);$api=c(k);$toastr=c(U);$translate=c(S);invalidCredentials=!1;formGroup=new V({password:new w("",[x.required])});disable2fa(){this.invalidCredentials=!1,this.$api.post("/users/otp/deactivate",this.formGroup.value).subscribe({next:()=>{this.$activeModal.close(),this.$toastr.success(this.$translate.instant("users.setup_2fa_disable_success"),this.$translate.instant("toast.title_success"))},error:()=>{this.formGroup.setValue({password:""}),this.invalidCredentials=!0}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=E({type:r,selectors:[["ng-component"]],decls:34,vars:27,consts:[[1,"modal-content",2,"min-height","300px"],[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-fw","fa-key","primary-text",2,"font-size","75px"],[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"],[1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["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(a,l){a&1&&(i(0,"div",0)(1,"div",1)(2,"h5",2),m(3),o(4,"translate"),n(),i(5,"button",3),o(6,"translate"),b("click",function(){return l.dismissModal()}),n()(),i(7,"div",4)(8,"div",5),d(9,"i",6),n(),i(10,"ul",7)(11,"li"),m(12),o(13,"translate"),n()(),i(14,"ul",8)(15,"li",9)(16,"label",10),m(17),o(18,"translate"),n(),i(19,"div",11),d(20,"input",12),o(21,"translate"),n()()(),h(22,ue,4,4,"ngb-alert",13),n(),i(23,"div",14)(24,"div",15)(25,"button",16),o(26,"translate"),b("click",function(){return l.dismissModal()}),m(27),o(28,"translate"),n()(),d(29,"div",17),i(30,"div",18)(31,"button",19),b("click",function(){return l.disable2fa()}),m(32),o(33,"translate"),n()()()()),a&2&&(e(3),p(s(4,11,"users.setup_2fa_disable")),e(2),u("aria-label",s(6,13,"form.button_close")),e(7),p(s(13,15,"users.setup_2fa_disable_current_password")),e(5),p(s(18,17,"users.label_password")),e(3),f("formControl",l.formGroup.controls.password)("placeholder",s(21,19,"users.label_password")),e(2),g(l.invalidCredentials&&!l.formGroup.controls.password.value?22:-1),e(3),u("aria-label",s(26,21,"form.button_close")),e(2),C(" ",s(28,23,"form.button_close")," "),e(4),f("disabled",l.formGroup.invalid),e(),C(" ",s(33,25,"form.button_disable")," "))},dependencies:[N,I,F,A,q,$,O],encapsulation:2})}return r})();var ae=pe(ce(),1);var fe=r=>({timeDiffError:r});function be(r,y){r&1&&(i(0,"li"),m(1),o(2,"translate"),n()),r&2&&(e(),p(s(2,1,"users.setup_2fa_scan_qr_code")))}function _e(r,y){if(r&1&&(i(0,"ngb-alert",8)(1,"p",16),m(2),o(3,"translate"),n(),i(4,"p",17),m(5),o(6,"translate"),n()()),r&2){let t=v();f("dismissible",!1),e(2),p(s(3,3,"users.setup_2fa_cannot_setup_2fa")),e(3),p(Y(6,5,"users.setup_2fa_server_time_out",D(8,fe,t.timeDiffError)))}}function ve(r,y){if(r&1&&(i(0,"ul",9)(1,"li",18)(2,"div",19),d(3,"app-qrcode",20),n()(),i(4,"li",21)(5,"label",22),m(6),o(7,"translate"),n(),i(8,"div",23),d(9,"input",24),n()()()),r&2){let t=v();e(3),f("data",t.otpString),e(3),p(s(7,3,"users.setup_2fa_enter_code")),e(3),f("formControl",t.formGroup.controls.code)}}function xe(r,y){if(r&1){let t=M();i(0,"button",25),o(1,"translate"),b("click",function(){B(t);let l=v();return T(l.dismissModal())}),m(2),o(3,"translate"),n()}r&2&&(u("aria-label",s(1,2,"form.button_close")),e(2),C(" ",s(3,4,"form.button_close")," "))}function we(r,y){if(r&1){let t=M();i(0,"button",25),o(1,"translate"),b("click",function(){B(t);let l=v();return T(l.dismissModal())}),m(2),o(3,"translate"),n()}r&2&&(u("aria-label",s(1,2,"form.button_close")),e(2),C(" ",s(3,4,"form.button_close")," "))}function Ce(r,y){if(r&1){let t=M();i(0,"button",26),b("click",function(){B(t);let l=v();return T(l.enable2fa())}),m(1),o(2,"translate"),n()}if(r&2){let t=v();f("disabled",t.formGroup.invalid),e(),C(" ",s(2,2,"form.button_enable")," ")}}var oe=(()=>{class r{$activeModal=c(G);$api=c(k);$toastr=c(U);$translate=c(S);user;timeDiffError=null;otpString;formGroup=new V({code:new w("",[x.required,x.minLength(6),x.maxLength(6)])});ngOnInit(){this.$api.post("/users/otp/setup",{}).subscribe({next:t=>{this.checkTimeDiff(t.timestamp),this.timeDiffError||(this.otpString=t.otpauth)},error:t=>{this.$activeModal.dismiss(),console.error(t),this.$toastr.error(this.$translate.instant("users.setup_2fa_enable_error"),this.$translate.instant("toast.title_error"))}})}enable2fa(){this.$api.post("/users/otp/activate",this.formGroup.value).subscribe({next:()=>{this.$toastr.success(this.$translate.instant("users.setup_2fa_enabled_success"),this.$translate.instant("toast.title_success")),this.$activeModal.close()},error:t=>{console.error(t),this.$toastr.error(this.$translate.instant("users.setup_2fa_activate_error"),this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}checkTimeDiff(t){let a=(0,ae.default)(t).diff(new Date,"millisecond");a<-5e3||a>5e3?this.timeDiffError=a:this.timeDiffError=null}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=E({type:r,selectors:[["ng-component"]],inputs:{user:"user"},decls:24,vars:15,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"],[1,"fas","fa-fw","fa-key","primary-text",2,"font-size","75px"],[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"],[1,"mx-auto",2,"width","175px","height","175px",3,"data"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],[1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["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","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(a,l){a&1&&(i(0,"div",0)(1,"div",1)(2,"h5",2),m(3),o(4,"translate"),n(),i(5,"button",3),o(6,"translate"),b("click",function(){return l.dismissModal()}),n()(),i(7,"div",4)(8,"div",5),d(9,"i",6),n(),i(10,"ul",7)(11,"li"),m(12),o(13,"translate"),n(),h(14,be,3,3,"li"),n(),h(15,_e,7,10,"ngb-alert",8),h(16,ve,10,5,"ul",9),n(),i(17,"div",10)(18,"div",11),h(19,xe,4,6,"button",12),n(),i(20,"div",13),h(21,we,4,6,"button",12),n(),i(22,"div",14),h(23,Ce,3,4,"button",15),n()()()),a&2&&(e(3),p(s(4,9,"users.setup_2fa")),e(2),u("aria-label",s(6,11,"form.button_close")),e(7),p(s(13,13,"users.setup_2fa_warning")),e(2),g(l.timeDiffError?-1:14),e(),g(l.timeDiffError?15:-1),e(),g(l.timeDiffError?-1:16),e(3),g(l.timeDiffError?-1:19),e(2),g(l.timeDiffError?21:-1),e(2),g(l.timeDiffError?-1:23))},dependencies:[O,ne,N,I,F,ee,A,q,$],encapsulation:2})}return r})();var se=r=>({"is-invalid":r}),le=(()=>{class r{$activeModal=c(G);$api=c(k);$toastr=c(U);$translate=c(S);form=new V({username:new w("",[x.required]),name:new w("",[x.required]),password:new w("",[x.compose([x.required,x.minLength(4)])]),passwordConfirm:new w("",[x.required]),admin:new w(!0)},this.matchPassword);onSubmit({value:t}){this.$api.post("/users",t).subscribe({next:()=>{this.$activeModal.close(),this.$toastr.success(this.$translate.instant("users.toast_added_new_user"),this.$translate.instant("toast.title_success"))},error:a=>{this.$toastr.error(a.error.message||this.$translate.instant("users.toast_failed_to_add_user"),this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}matchPassword(t){let a=t.get("password").value,l=t.get("passwordConfirm").value;if(a!==l)t.get("passwordConfirm").setErrors({matchPassword:!0});else return null}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=E({type:r,selectors:[["ng-component"]],decls:58,vars:50,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-3"],[1,"fas","fa-fw","fa-user-plus","primary-text",2,"font-size","75px"],[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",3,"ngClass"],["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",3,"ngClass"],[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","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(a,l){a&1&&(i(0,"div",0)(1,"form",1),b("ngSubmit",function(){return l.onSubmit(l.form)}),i(2,"div",2)(3,"h5",3),m(4),o(5,"translate"),n(),i(6,"button",4),o(7,"translate"),b("click",function(){return l.dismissModal()}),n()(),i(8,"div",5)(9,"div",6),d(10,"i",7),n(),i(11,"ul",8)(12,"li",9)(13,"label",10),m(14),o(15,"translate"),n(),i(16,"div",11),d(17,"input",12),o(18,"translate"),n()(),i(19,"li",9)(20,"label",13),m(21),o(22,"translate"),n(),i(23,"div",11),d(24,"input",14),o(25,"translate"),n()(),i(26,"li",9)(27,"label",15),m(28),o(29,"translate"),n(),i(30,"div",11),d(31,"input",16),o(32,"translate"),n()(),i(33,"li",9)(34,"label",17),m(35),o(36,"translate"),n(),i(37,"div",11),d(38,"input",18),o(39,"translate"),n()(),i(40,"li",19)(41,"span",20),m(42),o(43,"translate"),n(),i(44,"div",21),d(45,"input",22),o(46,"translate"),d(47,"label",23),n()()()(),i(48,"div",24)(49,"div",20)(50,"button",25),b("click",function(){return l.dismissModal()}),m(51),o(52,"translate"),n()(),d(53,"div",26),i(54,"div",27)(55,"button",28),m(56),o(57,"translate"),n()()()()()),a&2&&(e(),f("formGroup",l.form),e(3),p(s(5,18,"users.title_add_user")),e(2),u("aria-label",s(7,20,"form.button_close")),e(8),p(s(15,22,"users.label_username")),e(3),u("aria-label",s(18,24,"users.label_username")),e(4),p(s(22,26,"users.label_full_name")),e(3),u("aria-label",s(25,28,"users.label_full_name")),e(4),p(s(29,30,"users.label_password")),e(3),f("ngClass",D(46,se,l.form.controls.password.dirty&&l.form.controls.password.errors)),u("aria-label",s(32,32,"users.label_password")),e(4),p(s(36,34,"users.label_confirm_password")),e(3),f("ngClass",D(48,se,l.form.controls.passwordConfirm.dirty&&l.form.controls.passwordConfirm.errors)),u("aria-label",s(39,36,"users.label_confirm_password")),e(4),p(s(43,38,"users.label_admin_user")),e(3),u("aria-label",s(46,40,"users.label_admin_user")),e(6),C(" ",s(52,42,"form.button_close")," "),e(4),f("disabled",!l.form.valid),e(),C(" ",s(57,44,"form.button_save")," "))},dependencies:[N,z,I,F,P,A,R,L,j,$],encapsulation:2})}return r})();var me=r=>({"is-invalid":r});function he(r,y){if(r&1&&(i(0,"li",9)(1,"label",27),m(2),o(3,"translate"),n(),i(4,"div",11),d(5,"input",28),o(6,"translate"),n()()),r&2){let t=v();e(2),p(s(3,3,"users.label_confirm_password")),e(3),f("ngClass",D(7,me,t.form.controls.passwordConfirm.dirty&&t.form.controls.passwordConfirm.errors)),u("aria-label",s(6,5,"users.label_confirm_password"))}}var de=(()=>{class r{$activeModal=c(G);$api=c(k);$auth=c(Q);$toastr=c(U);$translate=c(S);user;isCurrentUser=!1;form=new V({username:new w("",[x.required]),name:new w("",[x.required]),password:new w(""),passwordConfirm:new w(""),admin:new w(!0)},this.matchPassword);ngOnInit(){this.isCurrentUser=this.$auth.user.username===this.user.username,this.form.patchValue(this.user)}onSubmit({value:t}){this.$api.patch(`/users/${this.user.id}`,t).subscribe({next:()=>{this.$activeModal.close(),this.$toastr.success(this.$translate.instant("users.toast_updated_user"),this.$translate.instant("toast.title_success")),this.isCurrentUser&&t.username!==this.$auth.user.username&&this.$auth.logout()},error:a=>{console.error(a),this.$toastr.error(a.error.message||this.$translate.instant("users.toast_failed_to_add_user"),this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}matchPassword(t){let a=t.get("password").value,l=t.get("passwordConfirm").value;if(a!==l)t.get("passwordConfirm").setErrors({matchPassword:!0});else return null}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=E({type:r,selectors:[["ng-component"]],inputs:{user:"user"},decls:52,vars:42,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-3"],[1,"fas","fa-fw","fa-user-pen","primary-text",2,"font-size","75px"],[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","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",3,"ngClass"],[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,"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"],["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",3,"ngClass"]],template:function(a,l){a&1&&(i(0,"div",0)(1,"form",1),b("ngSubmit",function(){return l.onSubmit(l.form)}),i(2,"div",2)(3,"h5",3),m(4),o(5,"translate"),n(),i(6,"button",4),o(7,"translate"),b("click",function(){return l.dismissModal()}),n()(),i(8,"div",5)(9,"div",6),d(10,"i",7),n(),i(11,"ul",8)(12,"li",9)(13,"label",10),m(14),o(15,"translate"),n(),i(16,"div",11),d(17,"input",12),o(18,"translate"),n()(),i(19,"li",9)(20,"label",13),m(21),o(22,"translate"),n(),i(23,"div",11),d(24,"input",14),o(25,"translate"),n()(),i(26,"li",9)(27,"label",15),m(28),o(29,"translate"),n(),i(30,"div",11),d(31,"input",16),o(32,"translate"),n()(),h(33,he,7,9,"li",9),i(34,"li",17)(35,"span",18),m(36),o(37,"translate"),n(),i(38,"div",19),d(39,"input",20),o(40,"translate"),d(41,"label",21),n()()()(),i(42,"div",22)(43,"div",18)(44,"button",23),b("click",function(){return l.dismissModal()}),m(45),o(46,"translate"),n()(),d(47,"div",24),i(48,"div",25)(49,"button",26),m(50),o(51,"translate"),n()()()()()),a&2&&(e(),f("formGroup",l.form),e(3),p(s(5,16,"users.title_edit_user")),e(2),u("aria-label",s(7,18,"form.button_close")),e(8),p(s(15,20,"users.label_username")),e(3),u("aria-label",s(18,22,"users.label_username")),e(4),p(s(22,24,"users.label_full_name")),e(3),u("aria-label",s(25,26,"users.label_full_name")),e(4),p(s(29,28,"users.label_new_password")),e(3),f("ngClass",D(40,me,l.form.controls.password.dirty&&l.form.controls.password.errors)),u("aria-label",s(32,30,"users.label_new_password")),e(2),g(l.form.controls.password.value?33:-1),e(3),p(s(37,32,"users.label_admin_user")),e(3),u("aria-label",s(40,34,"users.label_admin_user")),e(6),C(" ",s(46,36,"form.button_close")," "),e(4),f("disabled",!l.form.valid),e(),C(" ",s(51,38,"form.button_save")," "))},dependencies:[N,z,I,Z,F,P,A,R,L,j,$],encapsulation:2})}return r})();function ge(r,y){if(r&1){let t=M();i(0,"button",21),b("click",function(){B(t);let l=v().$implicit,_=v();return T(_.setup2fa(l))}),m(1),o(2,"translate"),n()}r&2&&(e(),p(s(2,1,"users.setup_2fa")))}function ye(r,y){if(r&1){let t=M();i(0,"button",17),b("click",function(){B(t);let l=v().$implicit,_=v();return T(_.disable2fa(l))}),m(1),o(2,"translate"),n()}r&2&&(e(),C(" ",s(2,1,"users.setup_2fa_disable")," "))}function Ee(r,y){if(r&1){let t=M();i(0,"div",7)(1,"div",8)(2,"div",9)(3,"div",10)(4,"span",11),d(5,"h4",12)(6,"h5",13),n()(),i(7,"div",14),h(8,ge,3,3,"button",15),h(9,ye,3,3,"button",16),i(10,"div")(11,"button",17),o(12,"translate"),b("click",function(){let l=B(t).$implicit,_=v();return T(_.openEditUser(l))}),d(13,"i",18),n(),i(14,"button",19),o(15,"translate"),b("click",function(){let l=B(t).$implicit,_=v();return T(_.deleteUser(l.id))}),d(16,"i",20),n()()()()()()}if(r&2){let t=y.$implicit,a=v();e(5),f("innerText",t.name),e(),f("innerText",t.username),e(2),g(a.username===t.username&&!t.otpActive?8:-1),e(),g(a.username===t.username&&t.otpActive?9:-1),e(2),u("aria-label",s(12,7,"form.button_edit")),e(3),f("disabled",a.username===t.username),u("aria-label",s(15,9,"form.button_delete"))}}var ht=(()=>{class r{$api=c(k);$auth=c(Q);$modal=c(te);$route=c(ie);$toastr=c(U);$translate=c(S);homebridgeUsers;username=this.$auth.user.username;ngOnInit(){this.$route.data.subscribe(t=>{this.homebridgeUsers=t.homebridgeUsers})}reloadUsers(){return this.$api.get("/users").subscribe(t=>{this.homebridgeUsers=t})}openAddNewUser(){this.$modal.open(le,{size:"lg",backdrop:"static"}).result.finally(()=>{this.reloadUsers()})}openEditUser(t){let a=this.$modal.open(de,{size:"lg",backdrop:"static"});a.componentInstance.user=t,a.result.finally(()=>{this.reloadUsers()})}deleteUser(t){this.$api.delete(`/users/${t}`).subscribe({next:()=>{this.$toastr.success(this.$translate.instant("users.toast_user_deleted"),this.$translate.instant("toast.title_success")),this.reloadUsers()},error:a=>{console.error(a),this.$toastr.error(a.error.message||this.$translate.instant("users.toast_failed_to_delete_user"),this.$translate.instant("toast.title_error"))}})}setup2fa(t){let a=this.$modal.open(oe,{size:"lg",backdrop:"static"});a.componentInstance.user=t,a.result.finally(()=>{this.reloadUsers()})}disable2fa(t){let a=this.$modal.open(re,{size:"lg",backdrop:"static"});a.componentInstance.user=t,a.result.finally(()=>{this.reloadUsers()})}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=E({type:r,selectors:[["app-users"]],decls:12,vars:6,consts:[[1,"row","mb-3"],[1,"col-9"],[1,"primary-text","m-0"],[1,"col-3","text-end"],[1,"btn","btn-elegant","waves-effect","m-0",3,"click"],[1,"fas","fa-fw","fa-user-plus"],[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"],[3,"innerText"],[1,"small","text-truncate","primary-text",3,"innerText"],[1,"d-flex","flex-row","justify-content-between"],[1,"btn","btn-primary","m-0"],[1,"btn","btn-elegant","m-0"],[1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-fw","fa-user-pen"],[1,"btn","btn-danger","m-0","ms-2",3,"click","disabled"],[1,"fas","fa-fw","fa-trash"],[1,"btn","btn-primary","m-0",3,"click"]],template:function(a,l){a&1&&(i(0,"div",0)(1,"div",1)(2,"h3",2),m(3),o(4,"translate"),n()(),i(5,"div",3)(6,"button",4),o(7,"translate"),b("click",function(){return l.openAddNewUser()}),d(8,"i",5),n()()(),i(9,"div",6),W(10,Ee,17,11,"div",7,K),n()),a&2&&(e(3),p(s(4,2,"users.title_users")),e(3),u("aria-label",s(7,4,"users.button_add_user")),e(4),X(l.homebridgeUsers))},dependencies:[$],encapsulation:2})}return r})();export{ht as UsersComponent};
|
|
1
|
+
import{a as ne}from"./chunk-7EQ4BJZB.js";import{g as O,m as G,n as te}from"./chunk-CF2ZN7LY.js";import{A,b as Z,c as I,d as x,e as F,f as P,g as V,j as w,m as z,o as q,p as R,q as L,x as ee,z as N}from"./chunk-T252YJXA.js";import{b as Q}from"./chunk-YQKD6BY7.js";import{b as ie}from"./chunk-X7PVYZAE.js";import{a as ce}from"./chunk-2IBWWARU.js";import{k as U,n as k}from"./chunk-TXQYIDCS.js";import{a as S,b as $}from"./chunk-LXXELGX4.js";import"./chunk-SRP6QX5M.js";import{Bc as o,Cc as s,Dc as Y,Hb as u,Ib as h,Jb as g,Lb as K,Mb as W,Nb as X,Ob as f,Pb as i,Qb as n,Rb as d,Vb as M,Yb as b,Zb as v,ab as e,cd as j,g as pe,kc as m,la as c,lc as p,mb as E,mc as C,ra as B,sa as T,xc as D}from"./chunk-SKZUTSHE.js";function ue(r,y){r&1&&(i(0,"ngb-alert",13)(1,"p",20),m(2),o(3,"translate"),n()()),r&2&&(f("dismissible",!1),e(2),p(s(3,2,"login.invalid_password")))}var re=(()=>{class r{$activeModal=c(G);$api=c(k);$toastr=c(U);$translate=c(S);invalidCredentials=!1;formGroup=new V({password:new w("",[x.required])});disable2fa(){this.invalidCredentials=!1,this.$api.post("/users/otp/deactivate",this.formGroup.value).subscribe({next:()=>{this.$activeModal.close(),this.$toastr.success(this.$translate.instant("users.setup_2fa_disable_success"),this.$translate.instant("toast.title_success"))},error:()=>{this.formGroup.setValue({password:""}),this.invalidCredentials=!0}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=E({type:r,selectors:[["ng-component"]],decls:34,vars:27,consts:[[1,"modal-content",2,"min-height","300px"],[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-fw","fa-key","primary-text",2,"font-size","75px"],[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"],[1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["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(a,l){a&1&&(i(0,"div",0)(1,"div",1)(2,"h5",2),m(3),o(4,"translate"),n(),i(5,"button",3),o(6,"translate"),b("click",function(){return l.dismissModal()}),n()(),i(7,"div",4)(8,"div",5),d(9,"i",6),n(),i(10,"ul",7)(11,"li"),m(12),o(13,"translate"),n()(),i(14,"ul",8)(15,"li",9)(16,"label",10),m(17),o(18,"translate"),n(),i(19,"div",11),d(20,"input",12),o(21,"translate"),n()()(),h(22,ue,4,4,"ngb-alert",13),n(),i(23,"div",14)(24,"div",15)(25,"button",16),o(26,"translate"),b("click",function(){return l.dismissModal()}),m(27),o(28,"translate"),n()(),d(29,"div",17),i(30,"div",18)(31,"button",19),b("click",function(){return l.disable2fa()}),m(32),o(33,"translate"),n()()()()),a&2&&(e(3),p(s(4,11,"users.setup_2fa_disable")),e(2),u("aria-label",s(6,13,"form.button_close")),e(7),p(s(13,15,"users.setup_2fa_disable_current_password")),e(5),p(s(18,17,"users.label_password")),e(3),f("formControl",l.formGroup.controls.password)("placeholder",s(21,19,"users.label_password")),e(2),g(l.invalidCredentials&&!l.formGroup.controls.password.value?22:-1),e(3),u("aria-label",s(26,21,"form.button_close")),e(2),C(" ",s(28,23,"form.button_close")," "),e(4),f("disabled",l.formGroup.invalid),e(),C(" ",s(33,25,"form.button_disable")," "))},dependencies:[N,I,F,A,q,$,O],encapsulation:2})}return r})();var ae=pe(ce(),1);var fe=r=>({timeDiffError:r});function be(r,y){r&1&&(i(0,"li"),m(1),o(2,"translate"),n()),r&2&&(e(),p(s(2,1,"users.setup_2fa_scan_qr_code")))}function _e(r,y){if(r&1&&(i(0,"ngb-alert",8)(1,"p",16),m(2),o(3,"translate"),n(),i(4,"p",17),m(5),o(6,"translate"),n()()),r&2){let t=v();f("dismissible",!1),e(2),p(s(3,3,"users.setup_2fa_cannot_setup_2fa")),e(3),p(Y(6,5,"users.setup_2fa_server_time_out",D(8,fe,t.timeDiffError)))}}function ve(r,y){if(r&1&&(i(0,"ul",9)(1,"li",18)(2,"div",19),d(3,"app-qrcode",20),n()(),i(4,"li",21)(5,"label",22),m(6),o(7,"translate"),n(),i(8,"div",23),d(9,"input",24),n()()()),r&2){let t=v();e(3),f("data",t.otpString),e(3),p(s(7,3,"users.setup_2fa_enter_code")),e(3),f("formControl",t.formGroup.controls.code)}}function xe(r,y){if(r&1){let t=M();i(0,"button",25),o(1,"translate"),b("click",function(){B(t);let l=v();return T(l.dismissModal())}),m(2),o(3,"translate"),n()}r&2&&(u("aria-label",s(1,2,"form.button_close")),e(2),C(" ",s(3,4,"form.button_close")," "))}function we(r,y){if(r&1){let t=M();i(0,"button",25),o(1,"translate"),b("click",function(){B(t);let l=v();return T(l.dismissModal())}),m(2),o(3,"translate"),n()}r&2&&(u("aria-label",s(1,2,"form.button_close")),e(2),C(" ",s(3,4,"form.button_close")," "))}function Ce(r,y){if(r&1){let t=M();i(0,"button",26),b("click",function(){B(t);let l=v();return T(l.enable2fa())}),m(1),o(2,"translate"),n()}if(r&2){let t=v();f("disabled",t.formGroup.invalid),e(),C(" ",s(2,2,"form.button_enable")," ")}}var oe=(()=>{class r{$activeModal=c(G);$api=c(k);$toastr=c(U);$translate=c(S);user;timeDiffError=null;otpString;formGroup=new V({code:new w("",[x.required,x.minLength(6),x.maxLength(6)])});ngOnInit(){this.$api.post("/users/otp/setup",{}).subscribe({next:t=>{this.checkTimeDiff(t.timestamp),this.timeDiffError||(this.otpString=t.otpauth)},error:t=>{this.$activeModal.dismiss(),console.error(t),this.$toastr.error(this.$translate.instant("users.setup_2fa_enable_error"),this.$translate.instant("toast.title_error"))}})}enable2fa(){this.$api.post("/users/otp/activate",this.formGroup.value).subscribe({next:()=>{this.$toastr.success(this.$translate.instant("users.setup_2fa_enabled_success"),this.$translate.instant("toast.title_success")),this.$activeModal.close()},error:t=>{console.error(t),this.$toastr.error(this.$translate.instant("users.setup_2fa_activate_error"),this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}checkTimeDiff(t){let a=(0,ae.default)(t).diff(new Date,"millisecond");a<-5e3||a>5e3?this.timeDiffError=a:this.timeDiffError=null}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=E({type:r,selectors:[["ng-component"]],inputs:{user:"user"},decls:24,vars:15,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"],[1,"fas","fa-fw","fa-key","primary-text",2,"font-size","75px"],[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"],[1,"mx-auto",2,"width","175px","height","175px",3,"data"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],[1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["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","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(a,l){a&1&&(i(0,"div",0)(1,"div",1)(2,"h5",2),m(3),o(4,"translate"),n(),i(5,"button",3),o(6,"translate"),b("click",function(){return l.dismissModal()}),n()(),i(7,"div",4)(8,"div",5),d(9,"i",6),n(),i(10,"ul",7)(11,"li"),m(12),o(13,"translate"),n(),h(14,be,3,3,"li"),n(),h(15,_e,7,10,"ngb-alert",8),h(16,ve,10,5,"ul",9),n(),i(17,"div",10)(18,"div",11),h(19,xe,4,6,"button",12),n(),i(20,"div",13),h(21,we,4,6,"button",12),n(),i(22,"div",14),h(23,Ce,3,4,"button",15),n()()()),a&2&&(e(3),p(s(4,9,"users.setup_2fa")),e(2),u("aria-label",s(6,11,"form.button_close")),e(7),p(s(13,13,"users.setup_2fa_warning")),e(2),g(l.timeDiffError?-1:14),e(),g(l.timeDiffError?15:-1),e(),g(l.timeDiffError?-1:16),e(3),g(l.timeDiffError?-1:19),e(2),g(l.timeDiffError?21:-1),e(2),g(l.timeDiffError?-1:23))},dependencies:[O,ne,N,I,F,ee,A,q,$],encapsulation:2})}return r})();var se=r=>({"is-invalid":r}),le=(()=>{class r{$activeModal=c(G);$api=c(k);$toastr=c(U);$translate=c(S);form=new V({username:new w("",[x.required]),name:new w("",[x.required]),password:new w("",[x.compose([x.required,x.minLength(4)])]),passwordConfirm:new w("",[x.required]),admin:new w(!0)},this.matchPassword);onSubmit({value:t}){this.$api.post("/users",t).subscribe({next:()=>{this.$activeModal.close(),this.$toastr.success(this.$translate.instant("users.toast_added_new_user"),this.$translate.instant("toast.title_success"))},error:a=>{this.$toastr.error(a.error.message||this.$translate.instant("users.toast_failed_to_add_user"),this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}matchPassword(t){let a=t.get("password").value,l=t.get("passwordConfirm").value;if(a!==l)t.get("passwordConfirm").setErrors({matchPassword:!0});else return null}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=E({type:r,selectors:[["ng-component"]],decls:58,vars:50,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-3"],[1,"fas","fa-fw","fa-user-plus","primary-text",2,"font-size","75px"],[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",3,"ngClass"],["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",3,"ngClass"],[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","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(a,l){a&1&&(i(0,"div",0)(1,"form",1),b("ngSubmit",function(){return l.onSubmit(l.form)}),i(2,"div",2)(3,"h5",3),m(4),o(5,"translate"),n(),i(6,"button",4),o(7,"translate"),b("click",function(){return l.dismissModal()}),n()(),i(8,"div",5)(9,"div",6),d(10,"i",7),n(),i(11,"ul",8)(12,"li",9)(13,"label",10),m(14),o(15,"translate"),n(),i(16,"div",11),d(17,"input",12),o(18,"translate"),n()(),i(19,"li",9)(20,"label",13),m(21),o(22,"translate"),n(),i(23,"div",11),d(24,"input",14),o(25,"translate"),n()(),i(26,"li",9)(27,"label",15),m(28),o(29,"translate"),n(),i(30,"div",11),d(31,"input",16),o(32,"translate"),n()(),i(33,"li",9)(34,"label",17),m(35),o(36,"translate"),n(),i(37,"div",11),d(38,"input",18),o(39,"translate"),n()(),i(40,"li",19)(41,"span",20),m(42),o(43,"translate"),n(),i(44,"div",21),d(45,"input",22),o(46,"translate"),d(47,"label",23),n()()()(),i(48,"div",24)(49,"div",20)(50,"button",25),b("click",function(){return l.dismissModal()}),m(51),o(52,"translate"),n()(),d(53,"div",26),i(54,"div",27)(55,"button",28),m(56),o(57,"translate"),n()()()()()),a&2&&(e(),f("formGroup",l.form),e(3),p(s(5,18,"users.title_add_user")),e(2),u("aria-label",s(7,20,"form.button_close")),e(8),p(s(15,22,"users.label_username")),e(3),u("aria-label",s(18,24,"users.label_username")),e(4),p(s(22,26,"users.label_full_name")),e(3),u("aria-label",s(25,28,"users.label_full_name")),e(4),p(s(29,30,"users.label_password")),e(3),f("ngClass",D(46,se,l.form.controls.password.dirty&&l.form.controls.password.errors)),u("aria-label",s(32,32,"users.label_password")),e(4),p(s(36,34,"users.label_confirm_password")),e(3),f("ngClass",D(48,se,l.form.controls.passwordConfirm.dirty&&l.form.controls.passwordConfirm.errors)),u("aria-label",s(39,36,"users.label_confirm_password")),e(4),p(s(43,38,"users.label_admin_user")),e(3),u("aria-label",s(46,40,"users.label_admin_user")),e(6),C(" ",s(52,42,"form.button_close")," "),e(4),f("disabled",!l.form.valid),e(),C(" ",s(57,44,"form.button_save")," "))},dependencies:[N,z,I,F,P,A,R,L,j,$],encapsulation:2})}return r})();var me=r=>({"is-invalid":r});function he(r,y){if(r&1&&(i(0,"li",9)(1,"label",27),m(2),o(3,"translate"),n(),i(4,"div",11),d(5,"input",28),o(6,"translate"),n()()),r&2){let t=v();e(2),p(s(3,3,"users.label_confirm_password")),e(3),f("ngClass",D(7,me,t.form.controls.passwordConfirm.dirty&&t.form.controls.passwordConfirm.errors)),u("aria-label",s(6,5,"users.label_confirm_password"))}}var de=(()=>{class r{$activeModal=c(G);$api=c(k);$auth=c(Q);$toastr=c(U);$translate=c(S);user;isCurrentUser=!1;form=new V({username:new w("",[x.required]),name:new w("",[x.required]),password:new w(""),passwordConfirm:new w(""),admin:new w(!0)},this.matchPassword);ngOnInit(){this.isCurrentUser=this.$auth.user.username===this.user.username,this.form.patchValue(this.user)}onSubmit({value:t}){this.$api.patch(`/users/${this.user.id}`,t).subscribe({next:()=>{this.$activeModal.close(),this.$toastr.success(this.$translate.instant("users.toast_updated_user"),this.$translate.instant("toast.title_success")),this.isCurrentUser&&t.username!==this.$auth.user.username&&this.$auth.logout()},error:a=>{console.error(a),this.$toastr.error(a.error.message||this.$translate.instant("users.toast_failed_to_add_user"),this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}matchPassword(t){let a=t.get("password").value,l=t.get("passwordConfirm").value;if(a!==l)t.get("passwordConfirm").setErrors({matchPassword:!0});else return null}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=E({type:r,selectors:[["ng-component"]],inputs:{user:"user"},decls:52,vars:42,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-3"],[1,"fas","fa-fw","fa-user-pen","primary-text",2,"font-size","75px"],[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","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",3,"ngClass"],[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,"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"],["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",3,"ngClass"]],template:function(a,l){a&1&&(i(0,"div",0)(1,"form",1),b("ngSubmit",function(){return l.onSubmit(l.form)}),i(2,"div",2)(3,"h5",3),m(4),o(5,"translate"),n(),i(6,"button",4),o(7,"translate"),b("click",function(){return l.dismissModal()}),n()(),i(8,"div",5)(9,"div",6),d(10,"i",7),n(),i(11,"ul",8)(12,"li",9)(13,"label",10),m(14),o(15,"translate"),n(),i(16,"div",11),d(17,"input",12),o(18,"translate"),n()(),i(19,"li",9)(20,"label",13),m(21),o(22,"translate"),n(),i(23,"div",11),d(24,"input",14),o(25,"translate"),n()(),i(26,"li",9)(27,"label",15),m(28),o(29,"translate"),n(),i(30,"div",11),d(31,"input",16),o(32,"translate"),n()(),h(33,he,7,9,"li",9),i(34,"li",17)(35,"span",18),m(36),o(37,"translate"),n(),i(38,"div",19),d(39,"input",20),o(40,"translate"),d(41,"label",21),n()()()(),i(42,"div",22)(43,"div",18)(44,"button",23),b("click",function(){return l.dismissModal()}),m(45),o(46,"translate"),n()(),d(47,"div",24),i(48,"div",25)(49,"button",26),m(50),o(51,"translate"),n()()()()()),a&2&&(e(),f("formGroup",l.form),e(3),p(s(5,16,"users.title_edit_user")),e(2),u("aria-label",s(7,18,"form.button_close")),e(8),p(s(15,20,"users.label_username")),e(3),u("aria-label",s(18,22,"users.label_username")),e(4),p(s(22,24,"users.label_full_name")),e(3),u("aria-label",s(25,26,"users.label_full_name")),e(4),p(s(29,28,"users.label_new_password")),e(3),f("ngClass",D(40,me,l.form.controls.password.dirty&&l.form.controls.password.errors)),u("aria-label",s(32,30,"users.label_new_password")),e(2),g(l.form.controls.password.value?33:-1),e(3),p(s(37,32,"users.label_admin_user")),e(3),u("aria-label",s(40,34,"users.label_admin_user")),e(6),C(" ",s(46,36,"form.button_close")," "),e(4),f("disabled",!l.form.valid),e(),C(" ",s(51,38,"form.button_save")," "))},dependencies:[N,z,I,Z,F,P,A,R,L,j,$],encapsulation:2})}return r})();function ge(r,y){if(r&1){let t=M();i(0,"button",21),b("click",function(){B(t);let l=v().$implicit,_=v();return T(_.setup2fa(l))}),m(1),o(2,"translate"),n()}r&2&&(e(),p(s(2,1,"users.setup_2fa")))}function ye(r,y){if(r&1){let t=M();i(0,"button",17),b("click",function(){B(t);let l=v().$implicit,_=v();return T(_.disable2fa(l))}),m(1),o(2,"translate"),n()}r&2&&(e(),C(" ",s(2,1,"users.setup_2fa_disable")," "))}function Ee(r,y){if(r&1){let t=M();i(0,"div",7)(1,"div",8)(2,"div",9)(3,"div",10)(4,"span",11),d(5,"h4",12)(6,"h5",13),n()(),i(7,"div",14),h(8,ge,3,3,"button",15),h(9,ye,3,3,"button",16),i(10,"div")(11,"button",17),o(12,"translate"),b("click",function(){let l=B(t).$implicit,_=v();return T(_.openEditUser(l))}),d(13,"i",18),n(),i(14,"button",19),o(15,"translate"),b("click",function(){let l=B(t).$implicit,_=v();return T(_.deleteUser(l.id))}),d(16,"i",20),n()()()()()()}if(r&2){let t=y.$implicit,a=v();e(5),f("innerText",t.name),e(),f("innerText",t.username),e(2),g(a.username===t.username&&!t.otpActive?8:-1),e(),g(a.username===t.username&&t.otpActive?9:-1),e(2),u("aria-label",s(12,7,"form.button_edit")),e(3),f("disabled",a.username===t.username),u("aria-label",s(15,9,"form.button_delete"))}}var ht=(()=>{class r{$api=c(k);$auth=c(Q);$modal=c(te);$route=c(ie);$toastr=c(U);$translate=c(S);homebridgeUsers;username=this.$auth.user.username;ngOnInit(){this.$route.data.subscribe(t=>{this.homebridgeUsers=t.homebridgeUsers})}reloadUsers(){return this.$api.get("/users").subscribe(t=>{this.homebridgeUsers=t})}openAddNewUser(){this.$modal.open(le,{size:"lg",backdrop:"static"}).result.finally(()=>{this.reloadUsers()})}openEditUser(t){let a=this.$modal.open(de,{size:"lg",backdrop:"static"});a.componentInstance.user=t,a.result.finally(()=>{this.reloadUsers()})}deleteUser(t){this.$api.delete(`/users/${t}`).subscribe({next:()=>{this.$toastr.success(this.$translate.instant("users.toast_user_deleted"),this.$translate.instant("toast.title_success")),this.reloadUsers()},error:a=>{console.error(a),this.$toastr.error(a.error.message||this.$translate.instant("users.toast_failed_to_delete_user"),this.$translate.instant("toast.title_error"))}})}setup2fa(t){let a=this.$modal.open(oe,{size:"lg",backdrop:"static"});a.componentInstance.user=t,a.result.finally(()=>{this.reloadUsers()})}disable2fa(t){let a=this.$modal.open(re,{size:"lg",backdrop:"static"});a.componentInstance.user=t,a.result.finally(()=>{this.reloadUsers()})}static \u0275fac=function(a){return new(a||r)};static \u0275cmp=E({type:r,selectors:[["app-users"]],decls:12,vars:6,consts:[[1,"row","mb-3"],[1,"col-9"],[1,"primary-text","m-0"],[1,"col-3","text-end"],[1,"btn","btn-elegant","waves-effect","m-0",3,"click"],[1,"fas","fa-fw","fa-user-plus"],[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"],[3,"innerText"],[1,"small","text-truncate","primary-text",3,"innerText"],[1,"d-flex","flex-row","justify-content-between"],[1,"btn","btn-primary","m-0"],[1,"btn","btn-elegant","m-0"],[1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-fw","fa-user-pen"],[1,"btn","btn-danger","m-0","ms-2",3,"click","disabled"],[1,"fas","fa-fw","fa-trash"],[1,"btn","btn-primary","m-0",3,"click"]],template:function(a,l){a&1&&(i(0,"div",0)(1,"div",1)(2,"h3",2),m(3),o(4,"translate"),n()(),i(5,"div",3)(6,"button",4),o(7,"translate"),b("click",function(){return l.openAddNewUser()}),d(8,"i",5),n()()(),i(9,"div",6),W(10,Ee,17,11,"div",7,K),n()),a&2&&(e(3),p(s(4,2,"users.title_users")),e(3),u("aria-label",s(7,4,"users.button_add_user")),e(4),X(l.homebridgeUsers))},dependencies:[$],encapsulation:2})}return r})();export{ht as UsersComponent};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as _,b as D}from"./chunk-
|
|
1
|
+
import{a as _,b as D}from"./chunk-2IBWWARU.js";import{m as c,n as S}from"./chunk-TXQYIDCS.js";import{f as x}from"./chunk-SRP6QX5M.js";import{C as v,g as O,ga as h,h as a,ha as E,ja as y,ka as l,la as f,nb as I,r as p,va as j,w as d,x as T,z as w}from"./chunk-SKZUTSHE.js";var g=new y("JWT_OPTIONS"),m=(()=>{class r{constructor(e=null){this.tokenGetter=e&&e.tokenGetter||function(){}}urlBase64Decode(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:{t+="==";break}case 3:{t+="=";break}default:throw new Error("Illegal base64url string!")}return this.b64DecodeUnicode(t)}b64decode(e){let t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o="";if(e=String(e).replace(/=+$/,""),e.length%4===1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(let i=0,s,n,b=0;n=e.charAt(b++);~n&&(s=i%4?s*64+n:n,i++%4)?o+=String.fromCharCode(255&s>>(-2*i&6)):0)n=t.indexOf(n);return o}b64DecodeUnicode(e){return decodeURIComponent(Array.prototype.map.call(this.b64decode(e),t=>"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)).join(""))}decodeToken(e=this.tokenGetter()){return e instanceof Promise?e.then(t=>this._decodeToken(t)):this._decodeToken(e)}_decodeToken(e){if(!e||e==="")return null;let t=e.split(".");if(t.length!==3)throw new Error("The inspected token doesn't appear to be a JWT. Check to make sure it has three parts and see https://jwt.io for more.");let o=this.urlBase64Decode(t[1]);if(!o)throw new Error("Cannot decode the token.");return JSON.parse(o)}getTokenExpirationDate(e=this.tokenGetter()){return e instanceof Promise?e.then(t=>this._getTokenExpirationDate(t)):this._getTokenExpirationDate(e)}_getTokenExpirationDate(e){let t;if(t=this.decodeToken(e),!t||!t.hasOwnProperty("exp"))return null;let o=new Date(0);return o.setUTCSeconds(t.exp),o}isTokenExpired(e=this.tokenGetter(),t){return e instanceof Promise?e.then(o=>this._isTokenExpired(o,t)):this._isTokenExpired(e,t)}_isTokenExpired(e,t){if(!e||e==="")return!0;let o=this.getTokenExpirationDate(e);return t=t||0,o===null?!1:!(o.valueOf()>new Date().valueOf()+t*1e3)}getAuthScheme(e,t){return typeof e=="function"?e(t):e}}return r.\u0275fac=function(e){return new(e||r)(l(g))},r.\u0275prov=h({token:r,factory:r.\u0275fac}),r})(),$=r=>r instanceof Promise?v(()=>r):p(r),R=(()=>{class r{constructor(e,t,o){this.jwtHelper=t,this.document=o,this.standardPorts=["80","443"],this.tokenGetter=e.tokenGetter,this.headerName=e.headerName||"Authorization",this.authScheme=e.authScheme||e.authScheme===""?e.authScheme:"Bearer ",this.allowedDomains=e.allowedDomains||[],this.disallowedRoutes=e.disallowedRoutes||[],this.throwNoTokenError=e.throwNoTokenError||!1,this.skipWhenExpired=e.skipWhenExpired}isAllowedDomain(e){let t=new URL(e.url,this.document.location.origin);if(t.host===this.document.location.host)return!0;let o=`${t.hostname}${t.port&&!this.standardPorts.includes(t.port)?":"+t.port:""}`;return this.allowedDomains.findIndex(i=>typeof i=="string"?i===o:i instanceof RegExp?i.test(o):!1)>-1}isDisallowedRoute(e){let t=new URL(e.url,this.document.location.origin);return this.disallowedRoutes.findIndex(o=>{if(typeof o=="string"){let i=new URL(o,this.document.location.origin);return i.hostname===t.hostname&&i.pathname===t.pathname}return o instanceof RegExp?o.test(e.url):!1})>-1}handleInterception(e,t,o){let i=this.jwtHelper.getAuthScheme(this.authScheme,t);if(!e&&this.throwNoTokenError)throw new Error("Could not get token from tokenGetter function.");let s=p(!1);return this.skipWhenExpired&&(s=e?$(this.jwtHelper.isTokenExpired(e)):p(!0)),e?s.pipe(T(n=>n&&this.skipWhenExpired?t.clone():t.clone({setHeaders:{[this.headerName]:`${i}${e}`}})),w(n=>o.handle(n))):o.handle(t)}intercept(e,t){if(!this.isAllowedDomain(e)||this.isDisallowedRoute(e))return t.handle(e);let o=this.tokenGetter(e);return $(o).pipe(w(i=>this.handleInterception(i,e,t)))}}return r.\u0275fac=function(e){return new(e||r)(l(g),l(m),l(j))},r.\u0275prov=h({token:r,factory:r.\u0275fac}),r})(),F=(()=>{class r{constructor(e){if(e)throw new Error("JwtModule is already loaded. It should only be imported in your application's main module.")}static forRoot(e){return{ngModule:r,providers:[{provide:x,useClass:R,multi:!0},e.jwtOptionsProvider||{provide:g,useValue:e.config},m]}}}return r.\u0275fac=function(e){return new(e||r)(l(r,12))},r.\u0275mod=I({type:r}),r.\u0275inj=E({}),r})();var k=O(_(),1);var q=(()=>{class r{$api=f(S);$jwtHelper=f(m);$settings=f(D);token;user={};logoutTimer;constructor(){this.loadToken()}login(e){return a(this,null,function*(){let t=yield d(this.$api.post("/auth/login",e));if(!this.validateToken(t.access_token))throw new Error("Invalid username or password.");window.localStorage.setItem(c.jwt.tokenKey,t.access_token),yield this.$settings.getAppSettings()})}noauth(){return a(this,null,function*(){let e=yield d(this.$api.post("/auth/noauth",{}));if(this.validateToken(e.access_token))window.localStorage.setItem(c.jwt.tokenKey,e.access_token),yield this.$settings.getAppSettings();else throw new Error("Invalid username or password.")})}logout(){this.user=null,this.token=null,window.localStorage.removeItem(c.jwt.tokenKey),window.location.reload()}loadToken(){return a(this,null,function*(){this.$settings.settingsLoaded||(yield d(this.$settings.onSettingsLoaded));let e=window.localStorage.getItem(c.jwt.tokenKey);e&&this.validateToken(e)})}checkToken(){return a(this,null,function*(){try{return yield d(this.$api.get("/auth/check"))}catch(e){e.status===401&&(console.error("Current token is not valid"),this.logout())}})}isLoggedIn(){return this.$settings.env.instanceId!==this.user.instanceId?(console.error("Token does not match instance"),!1):this.user&&this.token&&!this.$jwtHelper.isTokenExpired(this.token,this.$settings.serverTimeOffset)}validateToken(e){try{return this.$jwtHelper.isTokenExpired(e,this.$settings.serverTimeOffset)&&this.logout(),this.user=this.$jwtHelper.decodeToken(e),this.token=e,this.setLogoutTimer(),!0}catch{return window.localStorage.removeItem(c.jwt.tokenKey),this.token=null,!1}}setLogoutTimer(){if(clearTimeout(this.logoutTimer),!this.$jwtHelper.isTokenExpired(this.token,this.$settings.serverTimeOffset)){let t=(0,k.default)(this.$jwtHelper.getTokenExpirationDate(this.token)).diff((0,k.default)().add(this.$settings.serverTimeOffset,"s"),"millisecond");t<=2147483647&&(this.logoutTimer=setTimeout(()=>a(this,null,function*(){this.$settings.formAuth===!1?(yield this.noauth(),window.location.reload()):this.logout()}),t))}}static \u0275fac=function(t){return new(t||r)};static \u0275prov=h({token:r,factory:r.\u0275fac})}return r})();export{F as a,q as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as n}from"./chunk-X7PVYZAE.js";import{b as s}from"./chunk-
|
|
1
|
+
import{d as n}from"./chunk-X7PVYZAE.js";import{b as s}from"./chunk-2IBWWARU.js";import{ga as o,h as r,la as e,w as i}from"./chunk-SKZUTSHE.js";var l=(()=>{class t{$router=e(n);$settings=e(s);canActivate(){return r(this,null,function*(){return this.$settings.settingsLoaded||(yield i(this.$settings.onSettingsLoaded)),this.$settings.env.setupWizardComplete===!1||this.$router.navigate(["/"]),!0})}static \u0275fac=function(a){return new(a||t)};static \u0275prov=o({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();export{l as a};
|
package/public/index.html
CHANGED
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
<link rel="manifest" href="/assets/manifest.webmanifest"/>
|
|
17
17
|
<meta name="theme-color" content="#140a33" media="(prefers-color-scheme: light)"/>
|
|
18
18
|
<meta name="theme-color" content="#0f0f0f" media="(prefers-color-scheme: dark)"/>
|
|
19
|
-
<link rel="stylesheet" href="styles-
|
|
19
|
+
<link rel="stylesheet" href="styles-ZKWHTEN5.css" crossorigin="use-credentials"></head>
|
|
20
20
|
|
|
21
21
|
<body>
|
|
22
22
|
<app-root></app-root>
|
|
23
|
-
<link rel="modulepreload" href="chunk-
|
|
23
|
+
<link rel="modulepreload" href="chunk-6BERX4YF.js"><link rel="modulepreload" href="chunk-JZGFPSRH.js"><link rel="modulepreload" href="chunk-X2SHRXXY.js"><link rel="modulepreload" href="chunk-LCVO7RMH.js"><link rel="modulepreload" href="chunk-ZC3OSQNN.js"><link rel="modulepreload" href="chunk-S6JBR3LV.js"><link rel="modulepreload" href="chunk-J6YDFLQQ.js"><link rel="modulepreload" href="chunk-SJ5LU5VY.js"><link rel="modulepreload" href="chunk-PCUE2CWJ.js"><link rel="modulepreload" href="chunk-A2RA4YA5.js"><script src="polyfills-WE4HA5DL.js" type="module" crossorigin="use-credentials"></script><script src="main-BZ5GZLDT.js" type="module" crossorigin="use-credentials"></script></body>
|
|
24
24
|
</html>
|