hfs 3.3.0-rc5 → 3.3.0-rc7
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/admin/assets/{AccountsPage-Cq0xZ11q.js → AccountsPage-D18kfsM7.js} +2 -2
- package/admin/assets/{ArrayField-DlXwGcRi.js → ArrayField-C_SiccHt.js} +1 -1
- package/admin/assets/{ConfigFilePage-CS1DHLl9.js → ConfigFilePage-DK2WoVVT.js} +1 -1
- package/admin/assets/{CustomHtmlPage-D2bJwsUf.js → CustomHtmlPage-BuwxgXZb.js} +1 -1
- package/admin/assets/{DataTable--J_wIcuM.js → DataTable-YO7t2zol.js} +2 -2
- package/admin/assets/{DateTimeField-DWeCPNja.js → DateTimeField-JJtFlhyP.js} +1 -1
- package/admin/assets/{EventManager-DrRWt_JH.js → EventManager-CMbOaOVu.js} +1 -1
- package/admin/assets/{FileField-mNPkd3y3.js → FileField-DvOcVuL3.js} +1 -1
- package/admin/assets/{InternetPage--PzizUL_.js → InternetPage-Bnqiyd6R.js} +1 -1
- package/admin/assets/LangPage-UvLk_tcp.js +2 -0
- package/admin/assets/LogsPage-DZrag-6q.js +3 -0
- package/admin/assets/{MenuButton-DMz8eU4k.js → MenuButton-DZSVYDgz.js} +1 -1
- package/admin/assets/{MonitorPage-BfEEqSB9.js → MonitorPage-DHo-WAeK.js} +2 -2
- package/admin/assets/OptionsPage-C2tESF0q.js +3 -0
- package/admin/assets/PluginsPage-DsDE4gaI.js +1 -0
- package/admin/assets/{Tabs-B8NzzlRi.js → Tabs-Bo50sE_k.js} +1 -1
- package/admin/assets/{TextEditor-BF5GhCMi.js → TextEditor-CuqsIrmD.js} +1 -1
- package/admin/assets/{VfsPathField-BKblqejE.js → VfsPathField-DAjlREzU.js} +1 -1
- package/admin/assets/{agentIcons-xvHQBkKp.js → agentIcons-h26neS1O.js} +1 -1
- package/admin/assets/{baseUrl-Cp5EQLCd.js → baseUrl-DBsHXX2p.js} +1 -1
- package/admin/assets/{icons-BfdCXZin.js → icons-unNxkvar.js} +1 -1
- package/admin/assets/{index-CSmjBo2G.js → index-CCbBe4VH.js} +6 -6
- package/admin/assets/{routing-BQgmPveQ.js → routing-BTxUMqWz.js} +1 -1
- package/admin/index.html +1 -1
- package/frontend/assets/{dist-legacy-BwOLCt69.js → dist-legacy-DGxI1c76.js} +1 -1
- package/frontend/assets/index-legacy-DEPpVUOz.js +1 -0
- package/frontend/assets/{lib-legacy-Dtus09cI.js → lib-legacy-B78r2oy1.js} +1 -1
- package/frontend/assets/{sha512-legacy-CBENfTz7.js → sha512-legacy-Df4fa7x7.js} +1 -1
- package/frontend/index.html +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -1
- package/src/QuickZipStream.js +7 -0
- package/src/ThrottledStream.js +2 -0
- package/src/adminApis.js +4 -2
- package/src/auth.js +1 -0
- package/src/const.js +1 -1
- package/src/cross-const.js +3 -1
- package/src/cross.js +1 -1
- package/src/first.js +2 -1
- package/src/frontEndApis.js +47 -15
- package/src/i18n.js +1 -1
- package/src/middlewares.js +21 -14
- package/src/roots.js +6 -2
- package/src/serveFile.js +1 -1
- package/src/serveGuiAndSharedFiles.js +1 -1
- package/src/serveGuiFiles.js +5 -5
- package/src/upload.js +90 -42
- package/src/uploadOwners.js +49 -14
- package/src/util-http.js +15 -2
- package/src/vfs.js +71 -17
- package/src/webdav.js +93 -51
- package/admin/assets/LangPage-B4rQVR1J.js +0 -2
- package/admin/assets/LogsPage-Cf8QzZqj.js +0 -3
- package/admin/assets/OptionsPage-Di4sYyHk.js +0 -3
- package/admin/assets/PluginsPage-C1AwIVck.js +0 -1
- package/frontend/assets/index-legacy-BrUKT6jx.js +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-CacB07dV.js";import{t}from"./DateTimeField-
|
|
2
|
-
(already invalidated sessions before `,k(e.invalidated||0),`)`)}`,confirm:`Invalidate all sessions up to now for "${e.username}"?`,doneMessage:!0,onClick:()=>V(`invalidate_sessions`,{username:e.username}).then(a)}),...s(i)],fields:[{k:`username`,label:T?`Group name`:void 0,autoComplete:`off`,required:!0,md:T&&!j?12:4,getError:t=>t!==e.username&&V(`get_account`,{username:t}).then(t=>(t==null?void 0:t.username)===e.username?`usernames are case-insensitive`:`already used`,()=>!1)},j&&{k:``,md:8,comp:(0,q.createElement)(F,{severity:`info`},` Authentication handled by a plugin`)},!T&&!j&&{k:`password`,xs:6,md:4,type:`password`,autoComplete:`new-password`,required:w,label:w?`Password`:`Change password`},!T&&!j&&{k:`password2`,xs:6,md:4,type:`password`,autoComplete:`new-password`,label:`Repeat password`,getError:(e,{values:t})=>(e||``)!==(t.password||``)&&`Enter same password`},{k:`disabled`,comp:P,fromField:e=>!e,toField:e=>!e,label:`Enabled`,xs:12,sm:6,lg:4,helperText:_.disabled||_.canLogin!==!1?`Login is prevented if account is disabled, or all its groups are disabled`:(0,q.createElement)(B,{sx:{color:`warning.main`},component:`span`},new Date(e.expire)<new Date?`Login is prevented because account is expired`:`Login is prevented because all of its groups are disabled`)},{k:`ignore_limits`,comp:P,xs:12,sm:6,lg:4,helperText:_.ignore_limits?`Speed limits don't apply to this account`:`Speed limits apply to this account`},U({k:`admin`,comp:P,fromField:e=>e||null,label:`Admin-panel access`,xs:12,sm:6,lg:4,helperText:`To access THIS interface you are using right now`},!e.admin&&e.adminActualAccess&&{value:!0,disabled:!0,helperText:`This permission is inherited. To disable it, act on the groups.`}),!T&&{k:`require_password_change`,comp:P,xs:12,sm:6,lg:4,helperText:`At next login`},{k:`disable_password_change`,label:`Password change`,comp:ae,xs:12,sm:6,lg:4,defaultValue:null,options:{[`Default (${_.canChangePassword?`Allowed`:`Disabled`})`]:null,Allowed:!1,Disabled:!0}},A?T&&!A.length?(0,q.createElement)(B,{},`No members`):A.length>0&&(0,q.createElement)(O,{gap:0,flexWrap:`wrap`},`${A.length} members: `,N(`,\xA0`,(m=e.members)==null?void 0:m.map(e=>(0,q.createElement)(r.includes(e)?`i`:`span`,{},e))),(0,q.createElement)(W,{icon:K,confirm:`Delete ${e.members.length} accounts?`,onClick:()=>V(`del_account`,{username:e.members}).then(a),sx:{verticalAlign:`text-top`}})):null,T&&(0,q.createElement)(F,{severity:`info`},`To add users to this group, select the user and then click "Inherit"`),{k:`belongs`,comp:se,label:`Inherit from groups`,options:b,sm:6,lg:4,helperText:`Specify groups to inherit permissions from`+(T?`. A group can inherit from another group`:``)+(b.length?``:`. Now disabled because there are no groups to select, create one first.`)},{k:`allow_net`,comp:p,label:`Allowed network address`,sm:6,lg:4,placeholder:`any address`},!T&&{k:`auto_login_net`,comp:p,label:`Auto-login by IP address`,sm:6,lg:4,placeholder:`none`},{k:`redirect`,comp:o,placeholder:`no`,sm:6,lg:4,helperText:`If you want this account to be redirected to a specific folder/address (or even file) at login time`},{k:`expire`,label:`Expiration`,sm:6,lg:4,comp:t,toField:e=>e&&new Date(e),helperText:`When expired, login won't be allowed`},U(U({k:`days_to_live`,sm:6,lg:4,comp:z,step:`any`,min:1/1e3},_.expire&&{xs:12,disabled:!0,sx:{opacity:.2}}),{},{helperText:`Used to set expiration on first login`}),{k:`notes`,multiline:!0,sm:6,lg:4}],onError:v,save:U(U({},x(d(_,e))),{},{onClick(){return c(function*(){var t;let{password:r=``,password2:i,adminActualAccess:a,hasPassword:o,invalidated:s,canLogin:c,members:l}=_,d=u(_,Te),f=((t=E.current)==null?void 0:t.querySelector(`button.saveBtn`))||void 0;if(w){let e=yield V(`add_account`,d);if(r)try{yield h(_.username,r)}catch(e){throw V(`del_account`,{username:_.username}),e}n(e==null?void 0:e.username,f);return}let p=yield V(`set_account`,{username:e.username,changes:d});r&&(yield h(_.username,r),y(e=>U(U({},e),{},{password:``,password2:``}))),e.username===g&&(H.username=_.username),n(p==null?void 0:p.username,f)})()}})})}var J=e(pe());f(),A();var Y={fieldSeparator:`,`,lineSeparator:`
|
|
1
|
+
import{i as e}from"./rolldown-runtime-CacB07dV.js";import{t}from"./DateTimeField-JJtFlhyP.js";import{n,r,t as i}from"./MenuButton-DZSVYDgz.js";import{n as a,t as o}from"./VfsPathField-DAjlREzU.js";import{$n as s,Aa as c,C as l,Ca as u,Ct as d,Da as f,E as p,Ea as m,Et as h,F as g,Ft as _,H as v,Hr as y,Lt as b,M as x,Ma as S,N as C,O as w,Pr as T,R as E,Rn as D,S as O,St as k,Ta as A,U as j,Ut as M,W as ee,Yt as N,_ as te,ei as ne,en as re,er as ie,ft as P,gi as F,gt as ae,hi as I,hr as oe,ht as se,it as L,j as R,kr as ce,lt as le,mt as z,q as ue,ri as B,sr as V,st as de,ti as fe,tt as H,ur as pe,w as me,wa as U,y as W,zt as he}from"./index-CCbBe4VH.js";import{$ as ge,J as _e,Q as ve,X as ye,Y as be,Z as xe,et as G,it as Se,nt as Ce,rt as K,tt as we}from"./icons-unNxkvar.js";var q=e(S());A();var Te=[`password`,`password2`,`adminActualAccess`,`hasPassword`,`invalidated`,`canLogin`,`members`];function Ee({account:e,done:n,groups:r,addToBar:i,reload:a}){var f,m;let{username:g}=L(),[_,y]=(0,q.useState)(e),[b,S]=(0,q.useState)([]),C=re();(0,q.useEffect)(()=>{var t;y(e),S(r.filter(t=>t!==e.username)),C||(t=E.current)==null||(t=t.querySelector(`input`))==null||t.focus()},[JSON.stringify(e)]);let w=!e.username,{isGroup:T}=_,E=(0,q.useRef)(),{members:A}=e,j=(f=e.plugin)==null?void 0:f.auth;return(0,q.createElement)(le,{key:e.username,formRef:E,values:_,set(e,t){y(n=>U(U({},n),{},{[t]:e}))},barSx:U({gap:2,width:`100%`},ue()),stickyBar:!0,addToBar:[!w&&(0,q.createElement)(l,U(U({icon:K,title:`Delete`,confirm:`Delete ${e.username}?`},g===e.username&&{disabled:!0,title:`Cannot delete current account`}),{},{onClick:()=>V(`del_account`,{username:e.username}).then(a)})),(0,q.createElement)(l,{icon:be,title:`Invalidate past sessions${D(`
|
|
2
|
+
(already invalidated sessions before `,k(e.invalidated||0),`)`)}`,confirm:`Invalidate all sessions up to now for "${e.username}"?`,doneMessage:!0,onClick:()=>V(`invalidate_sessions`,{username:e.username}).then(a)}),...s(i)],fields:[{k:`username`,label:T?`Group name`:void 0,autoComplete:`off`,required:!0,md:T&&!j?12:4,getError:t=>t!==e.username&&V(`get_account`,{username:t}).then(t=>(t==null?void 0:t.username)===e.username?`usernames are case-insensitive`:`already used`,()=>!1)},j&&{k:``,md:8,comp:(0,q.createElement)(F,{severity:`info`},` Authentication handled by a plugin`)},!T&&!j&&{k:`password`,xs:6,md:4,type:`password`,autoComplete:`new-password`,required:w,label:w?`Password`:`Change password`},!T&&!j&&{k:`password2`,xs:6,md:4,type:`password`,autoComplete:`new-password`,label:`Repeat password`,getError:(e,{values:t})=>(e||``)!==(t.password||``)&&`Enter same password`},{k:`disabled`,comp:P,fromField:e=>!e,toField:e=>!e,label:`Enabled`,xs:12,sm:6,lg:4,helperText:_.disabled||_.canLogin!==!1?`Login is prevented if account is disabled, or all its groups are disabled`:(0,q.createElement)(B,{sx:{color:`warning.main`},component:`span`},new Date(e.expire)<new Date?`Login is prevented because account is expired`:`Login is prevented because all of its groups are disabled`)},{k:`ignore_limits`,comp:P,xs:12,sm:6,lg:4,helperText:_.ignore_limits?`Speed limits don't apply to this account`:`Speed limits apply to this account`},U({k:`admin`,comp:P,fromField:e=>e||null,label:`Admin-panel access`,xs:12,sm:6,lg:4,helperText:`To access THIS interface you are using right now`},!e.admin&&e.adminActualAccess&&{value:!0,disabled:!0,helperText:`This permission is inherited. To disable it, act on the groups.`}),!T&&{k:`require_password_change`,comp:P,xs:12,sm:6,lg:4,helperText:`At next login, but can be dismissed`},{k:`disable_password_change`,label:`Password change`,comp:ae,xs:12,sm:6,lg:4,defaultValue:null,options:{[`Default (${_.canChangePassword?`Allowed`:`Disabled`})`]:null,Allowed:!1,Disabled:!0}},A?T&&!A.length?(0,q.createElement)(B,{},`No members`):A.length>0&&(0,q.createElement)(O,{gap:0,flexWrap:`wrap`},`${A.length} members: `,N(`,\xA0`,(m=e.members)==null?void 0:m.map(e=>(0,q.createElement)(r.includes(e)?`i`:`span`,{},e))),(0,q.createElement)(W,{icon:K,confirm:`Delete ${e.members.length} accounts?`,onClick:()=>V(`del_account`,{username:e.members}).then(a),sx:{verticalAlign:`text-top`}})):null,T&&(0,q.createElement)(F,{severity:`info`},`To add users to this group, select the user and then click "Inherit"`),{k:`belongs`,comp:se,label:`Inherit from groups`,options:b,sm:6,lg:4,helperText:`Specify groups to inherit permissions from`+(T?`. A group can inherit from another group`:``)+(b.length?``:`. Now disabled because there are no groups to select, create one first.`)},{k:`allow_net`,comp:p,label:`Allowed network address`,sm:6,lg:4,placeholder:`any address`},!T&&{k:`auto_login_net`,comp:p,label:`Auto-login by IP address`,sm:6,lg:4,placeholder:`none`},{k:`redirect`,comp:o,placeholder:`no`,sm:6,lg:4,helperText:`If you want this account to be redirected to a specific folder/address (or even file) at login time`},{k:`expire`,label:`Expiration`,sm:6,lg:4,comp:t,toField:e=>e&&new Date(e),helperText:`When expired, login won't be allowed`},U(U({k:`days_to_live`,sm:6,lg:4,comp:z,step:`any`,min:1/1e3},_.expire&&{xs:12,disabled:!0,sx:{opacity:.2}}),{},{helperText:`Used to set expiration on first login`}),{k:`notes`,multiline:!0,sm:6,lg:4}],onError:v,save:U(U({},x(d(_,e))),{},{onClick(){return c(function*(){var t;let{password:r=``,password2:i,adminActualAccess:a,hasPassword:o,invalidated:s,canLogin:c,members:l}=_,d=u(_,Te),f=((t=E.current)==null?void 0:t.querySelector(`button.saveBtn`))||void 0;if(w){let e=yield V(`add_account`,d);if(r)try{yield h(_.username,r)}catch(e){throw V(`del_account`,{username:_.username}),e}n(e==null?void 0:e.username,f);return}let p=yield V(`set_account`,{username:e.username,changes:d});r&&(yield h(_.username,r),y(e=>U(U({},e),{},{password:``,password2:``}))),e.username===g&&(H.username=_.username),n(p==null?void 0:p.username,f)})()}})})}var J=e(pe());f(),A();var Y={fieldSeparator:`,`,lineSeparator:`
|
|
3
3
|
`,quote:`"`},X={field:0,fieldOffset:0,line:0,lineOffset:0,quoted:!1,appendCell:!1,appendField:!1,appendRow:!1},De=class extends Error{constructor(e,t){super(`Invalid CSV at ${e}:${t}`)}},Oe=class{constructor(e=Y){m(this,`_rows`,[]),m(this,`_row`,[]),m(this,`_cell`,``),m(this,`_options`,Y),m(this,`_state`,U({},X)),m(this,`_index`,0),m(this,`_current`,``),m(this,`_previous`,``),m(this,`_quoteState`,U({},X)),this._options=Object.assign({},Y,e)}parse(e){for(this.reset(),this._index=0;this._index<e.length;this._index++)this._state.appendCell=!0,this._previous=this._current,this._current=e[this._index],this.handleNext();if(this._row.length>0&&(this.addField(this.fieldValue(this._cell),this._row,this._state),this.addRow(this._row,this._rows,this._state)),this._state.quoted)throw new De(this._quoteState.line,this._quoteState.lineOffset);return this.makeImmutable(),this._rows}get rows(){return this._rows}get json(){if(this.rows.length>0){let e=this.rows[0].filter(e=>typeof e==`string`);return Object.freeze(this.rows.filter((e,t)=>e&&t>0).map(t=>{let n={};return e.forEach((e,r)=>{n[e]=t[r]}),Object.freeze(n)}))}return Object.freeze([])}handleNext(){this.handleQuote()||this.handleFieldSeparator()||this.handleLineSeparator(),this.processState()}handleQuote(){return this._current===this._options.quote?(this._quoteState=U({},this._state),this._previous===`\\`?this.handleQuoteEscaped():this.handleQuoteNotEscaped(),!0):!1}handleQuoteEscaped(){this._cell=this._cell.slice(0,Math.max(0,this._cell.length-1))}handleQuoteNotEscaped(){if(this._cell.length===0||this._state.quoted)this._state.quoted=!this._state.quoted;else throw new De(this._state.line,this._state.lineOffset);this._state.appendCell=!1}handleFieldSeparator(){return this._current===this._options.fieldSeparator?(this._state.quoted||(this._state.appendCell=!1,this._state.appendField=!0),!0):!1}handleLineSeparator(){return this._current===this._options.lineSeparator?(this._state.quoted||(this._state.appendCell=!1,this._state.appendField=!0,this._state.appendRow=!0),!0):!1}processState(){this._state.appendCell&&(this._cell+=this._current),this._state.appendField&&(this.addField(this.fieldValue(this._cell),this._row,this._state),this._cell=``),this._state.appendRow&&(this.addRow(this._row,this._rows,this._state),this._row=[]),this._state.lineOffset++,this._state.fieldOffset++}fieldValue(e){return e}addField(e,t,n){t.push(e),n.field++,n.fieldOffset=-1,n.appendField=!1}addRow(e,t,n){t.push(e),n.field=0,n.line++,n.lineOffset=-1,n.appendRow=!1}makeImmutable(){this.rows.forEach(e=>{e.forEach(e=>Object.freeze(e)),Object.freeze(e)}),Object.freeze(this._rows)}reset(){this._rows=[],this._row=[],this._cell=``,this._state=U({},X),this._index=0,this._current=``,this._previous=``,this._quoteState=U({},X)}};A();function ke(e){return Z.apply(this,arguments)}function Z(){return Z=c(function*(e){b(function(){var t=c(function*(t){let n=t==null?void 0:t[0];if(!n)return;let r=yield _(n);if(!r)return;let i=new Oe().parse(r.trim()),a={comp:z,min:1,max:9,xs:6,typing:!0},o={skipFirstLines:0,usernameColumn:1,passwordColumn:2,groupColumn:3,redirectColumn:4,overwriteExistingAccounts:!1},s=yield ee({title:`Import accounts from CSV`,dialogProps:{maxWidth:`sm`},values:o,form:e=>{let t=i[e.skipFirstLines||0],n=u(t,U(U({},o),e));return{save:{startIcon:(0,q.createElement)(_e),children:`Go`},fields:[(0,q.createElement)(B,{sx:{p:1}},`Total lines:`,i.length),{k:`skipFirstLines`,comp:z,max:i.length-1,typing:!0,md:6,helperText:(0,q.createElement)(q.Fragment,{},`First line: `,(0,q.createElement)(`code`,{},t.join(`, `)))},{k:`overwriteExistingAccounts`,comp:P,md:6},U(U({k:`usernameColumn`},a),{},{helperText:(0,q.createElement)(q.Fragment,{},`First username: `,n.u)}),U(U({k:`passwordColumn`},a),{},{helperText:(0,q.createElement)(q.Fragment,{},`First password: `,n.p)}),U(U({k:`groupColumn`},a),{},{helperText:(0,q.createElement)(q.Fragment,{},`First group: `,n.g)}),U(U({k:`redirectColumn`},a),{},{helperText:(0,q.createElement)(q.Fragment,{},`First redirect: `,n.r)})]}}});if(!s)return;let{close:l}=M({title:`Importing...`,Content(){let[t,n]=(0,q.useState)(0),[r,a]=(0,q.useState)();return(0,q.useEffect)(()=>{let t=!1;return setTimeout(c(function*(){if(t)return;let r=0,o=0,c=s.skipFirstLines,d=i.length-c;try{let e=0;for(let l of i){var f;if(t)return;if(c){c--;continue}let i=u(l,s);a(i),n(e++/d),yield V(`add_account`,{username:i.u,belongs:(f=i.g)==null?void 0:f.split(`,`),redirect:i.r,overwrite:s.overwriteExistingAccounts}).then(()=>{if(i.p)return h(i.u,i.p)},e=>{if(e.code===409)return o++;r++})}}finally{l();let t=d-r-o;v(`Results: `+[D(``,r,` failed`),D(``,t,` succeeded`),D(``,o,` skipped because already present`)].filter(Boolean).join(`, `),!t&&r?`error`:r||o?`warning`:`success`),e==null||e()}})),()=>{t=!0}},[]),(0,q.createElement)(B,{sx:{display:`flex`,gap:2,alignItems:`center`}},(0,q.createElement)(me,{icon:G,progress:t}),r==null?void 0:r.u)}});function u(e,t){return{u:e[t.usernameColumn-1],p:e[t.passwordColumn-1],g:e[t.groupColumn-1],r:e[t.redirectColumn-1]}}});return function(e){return t.apply(this,arguments)}}(),{multiple:!1,accept:`.csv`})}),Z.apply(this,arguments)}A();var Ae=` `,Q=e=>e==null?void 0:e.split(Ae).at(-1);function je(){let{username:e,accountsAsTree:t}=L(),{data:o,reload:s,element:u}=te(`get_accounts`),[d,f]=(0,q.useState)([]),p=Array.isArray(d);(0,q.useEffect)(()=>{Array.isArray(o==null?void 0:o.list)&&p&&f(d.filter(e=>o.list.find(t=>(t==null?void 0:t.username)===Q(e))))},[o]);let m=(0,q.useMemo)(()=>o&&J.default.sortBy(o.list,[e=>!e.isGroup,e=>!e.adminActualAccess,`username`]),[o]),h=p&&J.default.find(m,{username:Q(d[0])}),_=g(`md`),b=!(d.length>0)||!m?null:p&&d.length>1?(0,q.createElement)(q.Fragment,{},(0,q.createElement)(O,{},(0,q.createElement)(I,{variant:`h6`},d.length+` selected`),(0,q.createElement)(W,{onClick:ee,icon:K},`Remove`)),(0,q.createElement)(T,{},J.default.uniq(d.map(Q)).map(e=>(0,q.createElement)(a,{key:e},(0,q.createElement)(ce,{},e))))):ie(h||k(),e=>(0,q.createElement)(Ee,{account:e,groups:m.filter(e=>e.isGroup).map(e=>e.username),addToBar:_&&[(0,q.createElement)(B,{sx:{flex:1}}),$(e,{fontSize:`large`,sx:{p:1}}),(0,q.createElement)(l,{icon:de,title:`Close`,onClick:A})],reload:s,done(e,t){f(_?[e]:[]),s(),w(``,t)}}));(0,q.useEffect)(()=>{if(_||!b||!d.length)return;let{close:e}=M({title:J.default.isString(d)?J.default.startCase(d):d.length>1?`Multiple selection`:h?(h.isGroup?`Group: `:`User: `)+h.username:`?`,Content:()=>b,onClose:A});return()=>void e()},[_,d,h]);let x={height:`100%`,display:`flex`,flexDirection:`column`,overflow:`auto`},[S,D]=E(`Show tree`,`Show list`,()=>({icon:oe}),t);return H.accountsAsTree=S,u||(0,q.createElement)(y,{container:!0,sx:{rowSpacing:1,columnSpacing:2,top:0,flex:`1 1 auto`,height:0}},(0,q.createElement)(y,{size:{xs:12,md:5,lg:4,xl:5},sx:x},(0,q.createElement)(B,{sx:{display:`flex`,flexWrap:`wrap`,gap:2,mb:2,boxShadow:e=>`0px -8px 4px 10px ${e.palette.background.paper}`,position:`sticky`,top:0,zIndex:2,backgroundColor:`background.paper`,width:`fit-content`}},(0,q.createElement)(i,{variant:`contained`,startIcon:(0,q.createElement)(xe),items:[{children:`user`,onClick:()=>f(`new-user`)},{children:`group`,onClick:()=>f(`new-group`)},{children:`from CSV`,onClick:()=>ke(s)}]},`Add`),C(s),D,(m==null?void 0:m.length)>0&&(0,q.createElement)(I,{sx:{p:1}},`${m.length} account(s)`)),!(m!=null&&m.length)&&(0,q.createElement)(F,{severity:`info`},he`To access administration <u>remotely</u> you will need to create a user account with admin permission`),(0,q.createElement)(r,{multiSelect:!0,sx:{pr:4,pb:2,minWidth:`15em`},selectedItems:p?d:[],slots:{collapseIcon:we,expandIcon:Se},onSelectedItemsChange(e,t){var n,r;!(e==null||(n=e.target)==null||(r=n.closest)==null)&&r.call(n,`.MuiTreeItem-iconContainer`)||f(t)}},m&&(function e(t,r=``){return t.map(t=>{var i,a;return(0,q.createElement)(n,{key:t.username,itemId:r+t.username,label:(0,q.createElement)(B,{sx:{display:`flex`,flexWrap:`wrap`,padding:`.2em 0`,columnGap:`.5em`,alignItems:`center`}},$(t),(t.disabled||t.canLogin===!1)&&R(Ce,t.disabled?`Disabled`:`Disabled by its groups`,t.disabled?void 0:{color:`text.secondary`}),(t.expire||t.days_to_live)&&(0,q.createElement)(ye),t.adminActualAccess&&R(ge,`Can login into Admin`),t.username,!!((i=t.belongs)!=null&&i.length)&&(0,q.createElement)(B,{sx:{color:`text.secondary`,fontSize:`small`}},`(`,(a=t.belongs)==null?void 0:a.join(`, `),`)`))},S&&e(m.filter(e=>{var n;return(n=t.directMembers)==null?void 0:n.includes(e.username)}),r+t.username+Ae))})})(S?m.filter(e=>!m.some(t=>{var n;return(n=t.members)==null?void 0:n.includes(e.username)})):m))),_&&b&&(0,q.createElement)(y,{size:`grow`,sx:U(U({},x),{},{maxWidth:`100%`})},(0,q.createElement)(fe,{sx:{overflow:`initial`}},(0,q.createElement)(ne,{},b))));function k(){return{username:``,hasPassword:d===`new-user`,adminActualAccess:!1,invalidated:void 0,canLogin:!0,canChangePassword:!0,isGroup:d===`new-group`,members:[],directMembers:[]}}function A(){f([])}function ee(){return N.apply(this,arguments)}function N(){return N=c(function*(){if(typeof d==`string`)return;let t=J.default.without(J.default.uniq(d.map(Q)),e);if(d.length>t.length&&!(yield j(`You cannot ask to delete the account you are using. Continue with the rest?`)))return;if(!t.length)return v(`Nothing to delete`,`info`);if(!(yield j(`Delete ${t.length} item(s)?`)))return;let n=[];for(let e of t)(yield V(`del_account`,{username:e}).then(()=>1,()=>0))||n.push(e);if(s(),n.length)return v(`The following items couldn't be deleted: `+n.join(`, `),`error`)}),N.apply(this,arguments)}}function $(e,t={}){return(0,q.createElement)(e.isGroup?G:ve,t)}export{je as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-CacB07dV.js";import{n as t,t as n}from"./DataTable
|
|
1
|
+
import{i as e}from"./rolldown-runtime-CacB07dV.js";import{n as t,t as n}from"./DataTable-YO7t2zol.js";import{t as r}from"./DateTimeField-JJtFlhyP.js";import{Aa as i,C as a,Ca as o,F as s,Hn as c,I as l,Ma as u,Oa as d,S as f,St as p,Ta as m,Ur as ee,W as h,Wr as g,b as _,ct as v,dt as y,ft as b,ka as x,ni as S,qn as C,ri as w,un as T,ur as E,ut as D,wa as O,wn as te}from"./index-CCbBe4VH.js";import{F as ne,I as re,L as ie,P as ae,q as oe,rt as se}from"./icons-unNxkvar.js";var k=e(u()),A=e(E());m(),d();var j=[`label`,`helperText`,`fields`,`value`,`onChange`,`onError`,`setApi`,`reorder`,`prepend`,`noRows`,`valuesForAdd`,`autoRowHeight`,`dialog`,`form`,`details`,`objectK`,`saveOn`,`applyButton`,`height`,`error`,`sx`],M=[`$width`,`$column`,`$type`,`$hideUnder`,`showIf`,`$render`,`$mergeRender`];function N(e){let{label:r,helperText:l,fields:u,value:d,onChange:p,onError:m,setApi:v,reorder:b,prepend:S,noRows:E,valuesForAdd:N,autoRowHeight:I,dialog:L,form:R,details:z,objectK:B,saveOn:V,applyButton:H,height:U,error:W,sx:G}=e,ce=o(e,j),K=Array.isArray(d)?d:!B||!d?[]:Object.entries(d).map(([e,t])=>O({[B]:e},t)),q=(0,k.useMemo)(()=>K.map((e,t)=>c(O({},e),e.hasOwnProperty(`id`)?{$idx:t}:{id:t})),[JSON.stringify(K)]),J=!!W||void 0,Y=e=>t=>O(O({fields:T(u,t).map(e=>{var n;let{$width:r,$column:i,$type:a,$hideUnder:s,showIf:c,$render:l,$mergeRender:u}=e,d=o(e,M);return(!c||c(t))&&A.default.defaults(d,(n=F[a])==null?void 0:n.field)})},R),e);v==null||v({isEqual:te});let[X,le]=(0,k.useState)();return(0,k.createElement)(k.Fragment,{},(0,k.createElement)(f,{rowGap:0,flexWrap:`wrap`,ml:`2px`},r&&(0,k.createElement)(ee,{error:J,sx:{color:J?void 0:`text.primary`}},r),l&&(0,k.createElement)(g,{error:J},l)),(0,k.createElement)(w,O(O({},ce),{},{sx:y({height:U},G)}),(0,k.createElement)(n,O(O(O({rows:q,details:z},I&&{getRowHeight:()=>`auto`}),!s(`sm`)&&{compact:!0}),{},{sx:O({".MuiDataGrid-virtualScroller":{minHeight:`3em`}},I&&{".MuiDataGrid-cell":{minHeight:`52px !important`}}),hideFooterSelectedRowCount:!0,hideFooter:!0,slots:{noRowsOverlay:()=>(0,k.createElement)(_,{},E||`No entries`)},slotProps:{pagination:{showFirstButton:!0,showLastButton:!0}},onCellDoubleClick({field:e,row:t},n){var r;let i=T(u,!1).find(t=>!(0,k.isValidElement)(t)&&t.k===e&&t.$type===`boolean`);if(!i)return;let a=(r=t.$idx)==null?t.id:r,o=t[e],s=!(i.toField||A.default.identity)(o);Z(a,O(O({},K[a]),{},{[e]:(i.fromField||A.default.identity)(s,{originalValue:o})}),n)},columns:[...T(u,!1).map(e=>{var t,n;if((0,k.isValidElement)(e))return;let r=(t=F[e.$type])==null?void 0:t.column;return A.default.defaults(O(O({field:e.k,headerName:(n=e.headerName)==null?typeof e.label==`string`?e.label:D(e.k):n,disableColumnMenu:!0,valueGetter:t=>(e.toField||A.default.identity)(t)},e.$width?{[e.$width>=8?`width`:`flex`]:e.$width}:!(r!=null&&r.width)&&!(r!=null&&r.flex)&&{flex:1}),{},{renderCell:e.$render,mergeRender:e.$mergeRender,hideUnder:e.$hideUnder},e.$column),r)}).filter(Boolean),{field:``,type:`actions`,width:90,headerAlign:`center`,renderHeader(){return(0,k.createElement)(k.Fragment,{},(0,k.createElement)(a,{icon:ie,title:`Add`,size:`small`,onClick(e){return i(function*(){let t=yield h({form:Y({}),title:`Add`,values:N,dialogProps:L});if(!t)return;let n=K.slice()||[];S?n.unshift(t):n.push(t),Q(n,e)})()}}),X!==void 0&&(0,k.createElement)(a,{icon:ae,title:`Undo`,size:`small`,onClick:e=>Q(X,e)}))},getActions({row:e}){let{$idx:n=e.id}=e,a=`Modify`;return[(0,k.createElement)(t,{key:`edit`,icon:(0,k.createElement)(oe),label:a,title:a,onClick(t){return i(function*(){t.stopPropagation();let o=yield h({values:e,form:(e,{submit:t})=>Y(V===`change`&&{save:!1,onChange(e){Z(n,e,`change`)}}||H&&{addToBar:(0,k.createElement)(P,O(O({children:`Apply`,sx:O({ml:2},H.sx)},H),{},{onClick(){t(function(){var e=i(function*(e){let t=Z(n,O(O({},K[n]),e),`save`);yield H.onClick(t)});return function(t){return e.apply(this,arguments)}}())}}))}||V&&{save:!1})(e),title:(0,k.createElement)(k.Fragment,{},a,r&&` - `,r),dialogProps:L});o&&Z(n,o,t)})()}}),(0,k.createElement)(t,{key:`delete`,icon:(0,k.createElement)(se),label:`Delete`,showInMenu:b,onClick(e){e.stopPropagation(),Q(K.filter((e,t)=>t!==n),e)}}),b&&n&&(0,k.createElement)(t,{key:`up`,icon:(0,k.createElement)(re),label:`Move up`,showInMenu:!0,onClick(e){e.stopPropagation(),Q(C(K.slice(),n,n-1),e)}}),b&&n<q.length-1&&(0,k.createElement)(t,{key:`down`,icon:(0,k.createElement)(ne),label:`Move down`,showInMenu:!0,onClick(e){e.stopPropagation(),Q(C(K.slice(),n,n+1),e)}})].filter(Boolean)}}]}))));function Z(e,t,n){return Q(K.map((n,r)=>r===e?t:n),n)}function Q(e,t){let n=$(e);return p(n,{was:d,event:t}),V!==`change`&&le(K),n}function $(e){return B?Object.fromEntries(e.map(e=>{let{[B]:t}=e;return[t,o(e,[B].map(x))]})):e}}function P(e){return(0,k.createElement)(S,O({ref:l([`s`]).ref,title:`Apply
|
|
2
2
|
(ctrl+s)`},e))}var F={boolean:{field:{comp:b},column:{renderCell:({value:e})=>e&&(0,k.createElement)(v)}},dateTime:{field:{comp:r},column:{minWidth:96,flex:.5,renderCell:({value:e})=>p(e)}}};export{N as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-CacB07dV.js";import{C as t,Jt as n,Ma as r,N as i,Nt as a,Rn as o,S as s,_ as c,gi as l,jt as u,pt as d,qt as f,ri as p,sr as m,tt as h,vt as g,y as _}from"./index-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-CacB07dV.js";import{C as t,Jt as n,Ma as r,N as i,Nt as a,Rn as o,S as s,_ as c,gi as l,jt as u,pt as d,qt as f,ri as p,sr as m,tt as h,vt as g,y as _}from"./index-CCbBe4VH.js";import{K as v,q as y}from"./icons-unNxkvar.js";import{t as b}from"./TextEditor-CuqsIrmD.js";var x=e(r());function S(){h.title=`Config file`;let{data:e,reload:r,element:S}=c(`get_config_text`,{}),[C,w]=(0,x.useState)(),[T,E]=(0,x.useState)(),[D,O]=(0,x.useState)(!1);return(0,x.useEffect)(()=>{E(e==null?void 0:e.text)},[e]),(0,x.useEffect)(()=>{T!==void 0&&w(T||``)},[T]),S||(0,x.createElement)(x.Fragment,{},(0,x.createElement)(s,{flexWrap:`wrap`,justifyContent:`space-between`},(0,x.createElement)(_,{icon:v,onClick:A,disabled:!e},`Export without passwords`),D?(0,x.createElement)(x.Fragment,{},i(r),(0,x.createElement)(t,{icon:g,title:`Save
|
|
2
2
|
(ctrl+enter)`,modified:C!==T,onClick:k}),(0,x.createElement)(l,{severity:`warning`,sx:{minWidth:`10em`}},`Be careful, you can easily break things here`)):(0,x.createElement)(_,{icon:y,variant:`outlined`,onClick(){O(!0),setTimeout(()=>a(`main textarea`),500)}},`Edit`),(0,x.createElement)(p,{sx:{flex:1,minWidth:`fit-content`}},(0,x.createElement)(d,{label:`File path`,value:e==null?void 0:e.fullPath,size:`small`}))),S||C!==void 0&&(0,x.createElement)(p,{sx:{"& pre,& textarea":{wordBreak:`break-all !important`}}},(0,x.createElement)(f,{margin:10},(0,x.createElement)(b,{value:C,disabled:!D,style:{background:`#8881`},onValueChange:w,onKeyDown(e){[`s`,`Enter`].includes(n(e))&&(k(),e.preventDefault())}}))));function k(){return m(`set_config_text`,{text:C}).then(()=>E(C))}function A(){var t;let n=(C||``).replace(/^(\s*(\w*password|_\w*|token|srp|dynamic_dns_url):\s*).+\n/gm,`$1removed
|
|
3
3
|
`).replace(/(:\/\/)[^/@\s]+@/g,`$1removed@`)+o(`custom_html: | # this is currently ignored by hfs, just here for reference
|
|
4
4
|
`,(t=e.customHtml)==null?void 0:t.replace(/^/gm,` `));n&&u(`config_no_passwords.yaml`,n)}}export{S as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-CacB07dV.js";import{A as t,Aa as n,C as r,Cn as i,I as a,Ma as o,N as s,Rn as c,Ta as l,_ as u,ea as d,gi as f,gt as p,ir as m,it as h,nn as g,nr as _,ri as v,sr as y,tt as b,ur as x,vt as S,wa as C,yr as w,z as T,zt as E}from"./index-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-CacB07dV.js";import{A as t,Aa as n,C as r,Cn as i,I as a,Ma as o,N as s,Rn as c,Ta as l,_ as u,ea as d,gi as f,gt as p,ir as m,it as h,nn as g,nr as _,ri as v,sr as y,tt as b,ur as x,vt as S,wa as C,yr as w,z as T,zt as E}from"./index-CCbBe4VH.js";import{t as D}from"./TextEditor-CuqsIrmD.js";var O=e(x()),k=e(o());l();function A(e,t,n){return(0,k.createElement)(j,C({checked:e||!1,onChange(e,n){t(n)},disabled:e===void 0},n))}var j=d(w)(({theme:e,size:t})=>{let n=t&&t===`small`;return{height:n?36:48,width:n?18:26,padding:5,"& .MuiSwitch-switchBase":{margin:1,padding:0,transform:`translateY(${n?16:22}px)`,"&.Mui-checked":{color:e.palette.primary.contrastText,transform:`translateY(2px)`,"& .MuiSwitch-thumb:before":{backgroundImage:`url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="${n?14:20}" width="20" viewBox="0 0 20 20"><path fill="${encodeURIComponent(e.palette.primary.contrastText)}" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"/></svg>')`},"& + .MuiSwitch-track":{backgroundColor:e.palette.grey[500]}}},"& .Mui-checked .MuiSwitch-thumb":{backgroundColor:e.palette.primary.main,boxShadow:`0px 2px 1px 1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12)`},"& .MuiSwitch-thumb":{width:n?16:24,height:n?16:24,backgroundColor:e.palette.grey[700],"&::before":{content:`''`,position:`absolute`,width:`85%`,height:`85%`,left:0,top:0,backgroundRepeat:`no-repeat`,backgroundPosition:`center`,backgroundImage:`url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="${n?14:20}" width="20" viewBox="0 0 20 20"><path fill="${encodeURIComponent(e.palette.primary.contrastText)}" d="M19,13H5V11H19V13Z"/></svg>')`}},"& .MuiSwitch-track":{backgroundColor:e.palette.grey[500],borderRadius:20/2}}});l();var M={top:`Top of HTML Body`,bottom:`Bottom of HTML Body`};function N({setTitleSide:e}){let{data:o,reload:l}=u(`get_custom_html`),{customHtmlSection:d}=h(),[x,w]=(0,k.useState)({}),[j,N]=(0,k.useState)({});(0,k.useEffect)(()=>{o&&(N(o.sections),L(o.enabled))},[o]),(0,k.useEffect)(()=>w(j),[j]);let P=(0,k.useMemo)(()=>{let e=O.default.sortBy(Object.keys(x),i);return e.length&&!e.includes(d)&&(b.customHtmlSection=O.default.findKey(x,Boolean)||(e==null?void 0:e[0])||``),e.map(e=>{var t;return{value:e,label:(M[e]||c(`HTTP `,m[e])||O.default.startCase(e))+((t=x[e])!=null&&t.trim()?` *`:``)}})},[g(x,500)]),F=(0,k.useMemo)(()=>!O.default.isEqualWith(j,x,(e,t)=>!e&&!t||void 0),[j,x]),[I,L]=(0,k.useState)();return e((0,k.useMemo)(()=>(0,k.createElement)(v,{sx:{display:{xs:`none`,md:`block`}}},(0,k.createElement)(f,{severity:`info`},E("Add HTML code to some parts of the Front-end. It's saved to file `custom.html`, that you can edit directly with your editor of choice. "),T(`customization`,`More help`)),(0,k.createElement)(f,{severity:`info`},`To customize icons `,T(`customization#icons`,`read documentation`))),[])),(0,k.createElement)(k.Fragment,{},(0,k.createElement)(v,{sx:{display:`flex`,alignItems:`center`,gap:1,mb:1}},(0,k.createElement)(p,{label:`Section`,value:d,options:P,onChange:e=>b.customHtmlSection=e}),s(l),(0,k.createElement)(r,{ref:a([`s`,`Enter`]).ref,icon:S,title:`Save
|
|
2
2
|
(ctrl+s)`,modified:F,doneAnimation:!0,onClick:R}),t(`Enable all sections`,void 0,A(I,function(){var e=n(function*(e){yield y(`set_config`,{values:{[_.disable_custom_html]:!e}}),L(e)});return function(t){return e.apply(this,arguments)}}()))),(0,k.createElement)(D,{lang:d===`style`?`css`:d===`script`?`js`:`html`,value:(x==null?void 0:x[d])||``,style:{background:`#8881`},onValueChange(e){w(t=>C(C({},t),{},{[d]:e}))}}));function R(){return y(`set_custom_html`,{sections:x}).then(()=>N(x))}}export{N as default};
|