File: //usr/local/packages/@appstore/SMBService/ui/smb-tab.js
/* Copyright (c) 2026 Synology Inc. All rights reserved. */
Ext.define("SYNO.SDS.SMBService.Utils",{singleton:!0,_S:function(e,t){return _TT("SYNO.SDS.SMBService.Instance",e,t)||_T(e,t)},errMap:{0:["common","successful"],1e4:["error","msdfs_conn_failed"],10001:["error","msdfs_remote_auth_failed"],10002:["error","msdfs_local_auth_failed"],10003:["error","msdfs_account_remote_nopriv"],10004:["error","msdfs_account_local_nopriv"],10005:["error","msdfs_not_support_version"],2e4:["error","error_invalid"]},getErrorString:function(e){let t=SYNO.SDS.SMBService.Utils.errMap[e];return t||(t=SYNO.SDS.SMBService.Utils.errMap[2e4]),SYNO.SDS.SMBService.Utils._S(...t)},launchHelp:function(){SYNO.SDS.AppLaunch("SYNO.SDS.HelpBrowser.Application",{topic:"SYNO.SDS.SMBService.Instance:smbservice_smb_settings.html"},!1)},getSMBAPIMaxVersion:function(){var e=SYNO.API.GetKnownAPI("SYNO.Core.FileServ.SMB");return e?e.maxVersion:-1},isSupportHCI:function(){return"yes"===_D("support_hyper_converged","no")},getSMBAPI:function(e,t=null){let i;return i=this.isSupportHCI()?{api:"SYNO.Core.FileServ.SMB.Cluster",version:1}:{api:"SYNO.Core.FileServ.SMB",version:this.getSMBAPIMaxVersion()},i.method=e,t&&(i.params=t),i}}),Ext.define("SYNO.SDS.SMBService.SMB.SMBProtocolComboBox",{extend:"SYNO.ux.ComboBox",constructor:function(e){var t,i;this.displayField=e.displayField||"display",i='ext:qtip="{'+this.displayField+':htmlEncode}"',t={tpl:new Ext.XTemplate('<tpl for=".">',"<div "+i+' class="x-combo-list-item" role="option" aria-label="{'+this.displayField+'}" id="{[Ext.id()]}">',"<div "+i+">{"+this.displayField+"}</div>","</div>","</tpl>")},SYNO.ux.StorageComboBox.superclass.constructor.call(this,Ext.apply(t,e))}}),Ext.reg("synosamba_smb_protocol_combobox",SYNO.SDS.SMBService.SMB.SMBProtocolComboBox),Ext.define("SYNO.SDS.SMBService.SMB.GeneralTab",{extend:"SYNO.SDS.Utils.FormPanel",constructor:function(e){this.module=e.module,this.smbApiMaxVersion=SYNO.SDS.SMBService.Utils.getSMBAPIMaxVersion(),this.protocolList=[[_T("network","cifs_smb1_enable"),0],[_T("network","cifs_smb2_enable"),1],[_T("network","cifs_smb2_large_mtu_enable"),2],[_T("network","cifs_smb3_enable"),3]];var t=Ext.apply(this.fillConfig(),e);this.callParent([t]),this.on("afterlayout",(function(){this.enableOplockGroupDummy=new SYNO.ux.Utils.EnableCheckGroup(this.getForm(),"enable_op_lock",["enable_smb2_leases","enable_smb3_directory_leasing"]),this.enableDirectoryLeasingGroupDummy=new SYNO.ux.Utils.EnableCheckGroup(this.getForm(),"enable_smb3_directory_leasing",["smb3_directory_leasing_scope"])}),this,{single:!0})},loadConfirmHook:function(e){this.mon(this.getComponent("enable_op_lock"),"check",this.confirmOpLock,this)},fillConfig:function(){var e={autoscroll:!0,title:_T("network","smb_general"),border:!1,itemId:"general_tab",trackResetOnLoad:!0,height:470,width:250,padding:8,labelWidth:250,items:[{xtype:"syno_textfield",width:200,name:"wins",maxlength:15,itemId:"wins",fieldLabel:_T("network","netif_wins"),vtype:"ip"},{xtype:"syno_checkbox",name:"enable_op_lock",itemId:"enable_op_lock",boxLabel:_T("network","cifs_oplock")},{xtype:"syno_checkbox",name:"enable_smb2_leases",indent:1,itemId:"enable_smb2_leases",boxLabel:SYNO.SDS.SMBService.Utils._S("common","option_enable_smb2_leasing")},{xtype:"syno_checkbox",name:"enable_smb3_directory_leasing",indent:1,itemId:"enable_smb3_directory_leasing",boxLabel:SYNO.SDS.SMBService.Utils._S("common","option_enable_smb3_directory_leasing")},{xtype:"syno_radio",name:"smb3_directory_leasing_scope",indent:2,itemId:"smb3_directory_leasing_home_only",boxLabel:SYNO.SDS.SMBService.Utils._S("common","option_directory_leasing_home_only"),inputValue:"home_only",checked:!0},{xtype:"syno_radio",name:"smb3_directory_leasing_scope",indent:2,itemId:"smb3_directory_leasing_all",boxLabel:SYNO.SDS.SMBService.Utils._S("common","option_directory_leasing_all_shares"),inputValue:"all"},{xtype:"syno_checkbox",name:"enable_durable_handles",itemId:"enable_durable_handles",boxLabel:_T("network","enable_durable_handles")},{xtype:"syno_button",itemId:"smb_clear_tdb",btnStyle:"default",text:_T("network","smb_clear_tdb"),disabled:this._S("demo_mode"),tooltip:this._S("demo_mode")?_JSLIBSTR("uicommon","error_demo"):"",handler:this.clearTDB,scope:this},{xtype:"syno_checkbox",name:"enable_samba",hidden:!0}]};if(3===this.smbApiMaxVersion){var t=e.items,i=[{xtype:"synosamba_smb_protocol_combobox",name:"smb_max_protocol",itemId:"smb_max_protocol",indent:0,fieldLabel:_T("network","smb_max_protocol"),displayField:"display",valueField:"value",store:new Ext.data.ArrayStore({fields:["display","value"],idIndex:0,data:this.protocolList}),listeners:{select:this.updateSMBProtcolStatus,scope:this}},{xtype:"synosamba_smb_protocol_combobox",name:"smb_min_protocol",itemId:"smb_min_protocol",indent:0,fieldLabel:_T("network","smb_min_protocol"),displayField:"display",valueField:"value",store:new Ext.data.ArrayStore({fields:["display","value"],idIndex:0,data:this.protocolList}),listeners:{select:this.updateSMBProtcolStatus,scope:this}},{xtype:"syno_displayfield",name:"smb_enabled_protocol",itemId:"smb_enabled_protocol",htmlEncode:!1,fieldLabel:_T("network","smb_avail_protocol")},{xtype:"syno_combobox",name:"smb_encrypt_transport",itemId:"smb_encrypt_transport",indent:0,fieldLabel:_T("network","smb_encrypt_transport"),displayField:"display",valueField:"value",store:new Ext.data.ArrayStore({fields:["display","value"],idIndex:1,data:[[_T("ftp","ftp_utf8_disabled"),0],[_T("network","determined_by_client"),1],[_T("ftp","ftp_utf8_forced"),2]]}),listeners:{select:this.enableEncryptAlert,scope:this}},{xtype:"syno_combobox",name:"enable_server_signing",itemId:"enable_server_signing",indent:0,fieldLabel:SYNO.SDS.SMBService.Utils._S("common","option_server_signing"),displayField:"display",valueField:"value",store:new Ext.data.ArrayStore({fields:["display","value"],idIndex:1,data:[[SYNO.SDS.SMBService.Utils._S("common","option_disable_smb1_signing_only"),0],[_T("network","determined_by_client"),1],[_T("ftp","ftp_utf8_forced"),2]]})}];t=t.slice(0,1).concat(i).concat(t.slice(1)),e.items=t}return e},enableClearTDB:function(e){this.getComponent("smb_clear_tdb").setDisabled(!e)},clearTDB:function(){this.ownerCt.ownerCt.getMsgBox().confirm(_T("tree","leaf_winmacnfs"),_T("network","service_restart_warning")+" "+_T("common","ask_cont"),(function(e,t){if("yes"===e){this.setStatusBusy();let e=SYNO.SDS.SMBService.Utils.getSMBAPI("clean_cache");this.sendWebAPI({api:e.api,method:e.method,version:e.version,scope:this,callback:function(e,t,i){if(this.clearStatusBusy(),e)return this.enableClearTDB(!1),!0}})}}),this)},confirmOpLock:function(e,t){t||(this.getComponent("enable_smb2_leases").setValue(!1),this.getComponent("enable_smb3_directory_leasing").setValue(!1))},updateSMBProtcolStatus:function(e){for(var t=e?e.name:"",i=this.getComponent("smb_max_protocol"),n=this.getComponent("smb_min_protocol"),s=this.getComponent("smb_enabled_protocol"),o=i.getValue(),a=n.getValue(),l="",r=this.protocolList,c=0;c<r.length;c++){var d=r[c];d[1]>=a&&d[1]<=o&&(""!==l&&(l+=","),l+=d[0])}s.setValue(l),s.originalValue=s.getValue(),"smb_min_protocol"!==t&&n.store.loadData(r.filter((function(e){return e[1]<=o&&e[1]<3}))),"smb_max_protocol"!==t&&i.store.loadData(r.filter((function(e){return e[1]>=a}))),this.updateSMBEncryptStatus()},updateSMBEncryptStatus:function(){var e=this.getComponent("smb_encrypt_transport"),t=!0;3===this.getComponent("smb_max_protocol").getValue()&&(t=!1),e.setDisabled(t)},enableEncryptAlert:function(){var e=this.getComponent("smb_encrypt_transport");let t=Ext.id();if(2===e.getValue()){this.ownerCt.ownerCt.getMsgBox().confirm(_T("tree","leaf_winmacnfs"),String.format(_T("network","cifs_enable_encrypt_alert"),'<a id="'+t+'" class="link-font" style="cursor:pointer">',"</a>"),(function(t,i,n){"no"==t&&e.reset(),"yes"==t&&this.getComponent("enable_op_lock").setValue(!1)}),this).mon(Ext.get(t),"click",SYNO.SDS.SMBService.Utils.launchHelp)}}}),Ext.define("SYNO.SDS.SMBService.SMB.MacTab",{extend:"SYNO.SDS.Utils.FormPanel",constructor:function(e){this.module=e.module;var t=Ext.apply(this.fillConfig(),e);this.callParent([t])},loadConfirmHook:function(e){this.mon(this.getComponent("enable_syno_catia"),"check",this.confirmCatia,this)},fillConfig:function(){return{autoscroll:!0,title:_T("network","smb_mac"),border:!1,itemId:"mac_tab",trackResetOnLoad:!0,height:430,width:250,padding:8,labelWidth:250,items:[{xtype:"syno_checkbox",name:"enable_syno_catia",itemId:"enable_syno_catia",boxLabel:_T("network","smb_enable_syno_catia")},{xtype:"syno_displayfield",indent:1,value:_T("network","suggest_mac_user_to_enable_catia")},{xtype:"spacer",height:10},{xtype:"syno_checkbox",name:"enable_fruit_locking",itemId:"enable_fruit_locking",boxLabel:_T("network","smb_fruit_locking")},{xtype:"syno_displayfield",indent:1,value:_T("network","smb_enable_durable_handles_warn_fruit_locking")}]}},confirmCatia:function(e,t){var i=this.ownerCt.othersTab,n=i.getComponent("enable_symlink").getValue();if(t&&!n){var s=_T("network","cifs_enable_catia_warn_symlink");s=s+"<p />"+_T("common","cfrm_continue"),this.ownerCt.ownerCt.getMsgBox().confirm(_T("tree","leaf_winmacnfs"),s,(function(e){if("no"==e){var t=this.getComponent("enable_syno_catia");t.suspendEvents(!1),t.setValue(!1),t.resumeEvents()}else i.getComponent("enable_symlink").setValue(!0)}),this)}}}),Ext.define("SYNO.SDS.SMBService.SupportConfig",{singleton:!0,EnableMultichannel:!0}),Ext.define("SYNO.SDS.SMBService.SMB.OthersTab",{extend:"SYNO.SDS.Utils.FormPanel",constructor:function(e){this.module=e.module;var t=Ext.apply(this.fillConfig(),e);this.callParent([t]),this.on("afterlayout",(function(){this.enableVetoFileGroupDummy=new SYNO.ux.Utils.EnableCheckGroup(this.getForm(),"enable_vetofile",["vetofile","enable_delete_vetofiles"]),this.enableSymLinkGroupDummy=new SYNO.ux.Utils.EnableCheckGroup(this.getForm(),"enable_symlink",["enable_widelink"])}),this,{single:!0})},loadConfirmHook:function(e){this.mon(this.getComponent("enable_vetofile"),"check",this.confirmVetofile,this),this.mon(this.getComponent("enable_symlink"),"check",this.confirmSymLink,this),SYNO.SDS.SMBService.SupportConfig.EnableMultichannel&&(this.mon(this.getComponent("enable_multichannel"),"check",this.confirmMultichannel,this),this.mon(this.getComponent("enable_aio_read"),"check",this.confirmAioRead,this))},updateFields:function(){this.updateMultichannelField(),this.updatePerfChartField()},fillConfig:function(){return{autoscroll:!0,title:_T("network","smb_others"),border:!1,itemId:"others_tab",trackResetOnLoad:!0,height:430,width:250,padding:8,labelWidth:250,items:[{xtype:"syno_checkbox",name:"enable_local_master_browser",itemId:"enable_local_master_browser",boxLabel:_T("network","network_lmb_enable")},{xtype:"syno_checkbox",name:"enable_dirsort",boxLabel:_T("network","smb_enable_dirsort")},{xtype:"syno_displayfield",indent:1,value:_T("network","smb_enable_dirsort_desc")},{xtype:"syno_checkbox",name:"enable_vetofile",itemId:"enable_vetofile",boxLabel:_T("network","smb_enable_vetofile")},{xtype:"syno_textfield",name:"vetofile",itemId:"vetofile",regex:/^(\/[^/]+)+\/$/,indent:1,width:200,fieldLabel:_T("network","smb_vetofile_list"),emptyText:"/*.txt/README/",allowBlank:!1},{xtype:"syno_checkbox",name:"enable_delete_vetofiles",itemId:"enable_delete_vetofiles",indent:1,boxLabel:_T("network","smb_delete_vetofiles")},{xtype:"syno_checkbox",name:"enable_symlink",itemId:"enable_symlink",boxLabel:_T("network","smb_enable_symlink")},{xtype:"syno_checkbox",name:"enable_widelink",itemId:"enable_widelink",indent:1,boxLabel:_T("network","smb_enable_widelink")},{xtype:"syno_checkbox",name:"enable_reset_on_zero_vc",itemId:"enable_reset_on_zero_vc",boxLabel:_T("network","smb_reset_on_zero_vc")},{xtype:"syno_checkbox",name:"enable_enhance_log",itemId:"enable_enhance_log",boxLabel:_T("network","smb_enhance_log")},{xtype:"syno_checkbox",name:"enable_mask",boxLabel:_T("common","apply_default_umask")},{xtype:"syno_checkbox",name:"disable_strict_allocate",itemId:"disable_strict_allocate",boxLabel:_T("network","smb_disable_strict_allocate")},{xtype:"syno_checkbox",name:"enable_ntlmv1_auth",itemId:"enable_ntlmv1_auth",boxLabel:_T("network","smb_enable_ntlmv1_auth")},{xtype:"syno_checkbox",name:"enable_aio_read",itemId:"enable_aio_read",boxLabel:_T("network","smb_enable_aio_read")},{xtype:"syno_checkbox",name:"enable_synotify",itemId:"enable_synotify",boxLabel:_T("network","smb_enable_synotify")},{xtype:"syno_checkbox",name:"enable_strict_sync",itemId:"enable_strict_sync",boxLabel:_T("network","smb_enable_strict_sync")},{xtype:"syno_checkbox",name:"enable_multichannel",itemId:"enable_multichannel",boxLabel:SYNO.SDS.SMBService.Utils._S("common","option_enable_multichannel"),hidden:!SYNO.SDS.SMBService.SupportConfig.EnableMultichannel,disabled:!SYNO.SDS.SMBService.SupportConfig.EnableMultichannel},{xtype:"syno_checkbox",name:"syno_wildcard_search",itemId:"syno_wildcard_search",boxLabel:_T("network","syno_wildcard_search")},{xtype:"syno_checkbox",name:"enable_perf_chart",itemId:"enable_perf_chart",boxLabel:SYNO.SDS.SMBService.Utils._S("common","option_enable_perf_chart")},{xtype:"syno_button",itemId:"view_perf_chart",btnStyle:"default",indent:1,text:SYNO.SDS.SMBService.Utils._S("common","view"),disabled:!0,handler:this.launchResourceMonitor,scope:this}]}},confirmVetofile:function(e,t){t||this.getComponent("enable_delete_vetofiles").setValue(!1)},confirmSymLink:function(e,t){if(!t)if(!0===this.ownerCt.macTab.getComponent("enable_syno_catia").getValue()){var i=_T("network","cifs_disable_symlink_warn");i=i+"<p />"+_T("common","cfrm_continue"),this.ownerCt.ownerCt.getMsgBox().confirm(_T("tree","leaf_winmacnfs"),i,(function(e){if("no"==e)this.getComponent("enable_symlink").setValue(!0);else{var t=this.ownerCt.macTab.getComponent("enable_syno_catia");t.suspendEvents(!1),t.setValue(!1),t.resumeEvents(),this.getComponent("enable_widelink").setValue(!1)}}),this)}else this.getComponent("enable_widelink").setValue(!1)},confirmMultichannel:function(e,t){if(t&&!1===this.getComponent("enable_aio_read").getValue()){let e=SYNO.SDS.SMBService.Utils._S("common","confirm_enable_multichannel_warn_aio_read");this.ownerCt.ownerCt.getMsgBox().confirm(_T("tree","leaf_winmacnfs"),e,(function(e){if("no"===e)this.getComponent("enable_multichannel").setValue(!1);else{let e=this.getComponent("enable_aio_read");e.suspendEvents(!1),e.setValue(!0),e.resumeEvents()}}),this)}},confirmAioRead:function(e,t){if(!t&&!0===this.getComponent("enable_multichannel").getValue()){let e=SYNO.SDS.SMBService.Utils._S("common","confirm_disable_aio_read_warn_multichannel");this.ownerCt.ownerCt.getMsgBox().confirm(_T("tree","leaf_winmacnfs"),e,(function(e){if("no"===e)this.getComponent("enable_aio_read").setValue(!0);else{let e=this.getComponent("enable_multichannel");e.suspendEvents(!1),e.setValue(!1),e.resumeEvents()}}),this)}},updateMultichannelField:function(){let e=this.getComponent("enable_multichannel");!0!==e.getValue()&&(this.ownerCt.networkBondCreated?(e.setDisabled(!0),e.wrap.dom.setAttribute("ext:qtip",SYNO.SDS.SMBService.Utils._S("common","no_multichannel_if_link_aggregation_exist"))):e.wrap.dom.removeAttribute("ext:qtip"))},updatePerfChartField:function(){let e=this.getComponent("view_perf_chart");this.getComponent("enable_perf_chart").getValue()&&e.enable()},launchResourceMonitor:function(){SYNO.SDS.AppLaunch("SYNO.SDS.ResourceMonitor.Instance",{fn:"SYNO.SDS.ResourceMonitor.Performance.Main"},!1,(e=>{let t=e.window.activePage,i="smb_main";"SYNO.SDS.ResourceMonitor.Performance.Main"===t.itemId&&t.activeTab.itemId!==i&&(!0!==t.show_smb?t.on("smbperformanceloaded",(()=>{t.setActiveTab(i)})):t.setActiveTab(i))}))}}),Ext.define("SYNO.SDS.SMBService.Instance",{}),Ext.define("SYNO.SDS.SMBService.AppPrivilege.Instance",{}),Ext.define("SYNO.SDS.SMBService.SMB.AdvancedSettingsDialog",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){this.module=e.module,this.enableSMBTimeMachine=!1,this.tabPanel=this.initTabPanel();var t=this.fillConfig(e);this.callParent([t])},fillConfig:function(e){var t={title:_T("common","adv_setting"),itemId:"advanced_settings_dialog",autoDestroy:!0,resizable:!1,width:600,autoHeight:!0,layout:"fit",border:!1,closeAction:"cancelHandler",items:this.tabPanel,buttons:[{btnStyle:"grey",text:_T("common","cancel"),scope:this,handler:this.cancelHandler},{btnStyle:"blue",disabled:this._S("demo_mode"),tooltip:this._S("demo_mode")?_JSLIBSTR("uicommon","error_demo"):"",text:_T("common","save"),scope:this,handler:this.applyHandler}]};return t=Ext.apply(t,e)},initTabPanel:function(){return new SYNO.SDS.SMBService.SMB.AdvancedSettingsTabPanel({module:this.module})},onShow:function(){this.tabPanel.onShow()},applyHandler:function(){this.tabPanel.applyForms()},cancelHandler:function(){var e={dontSave:function(){this.close()},cancel:Ext.emptyFn,save:function(){this.tabPanel.applyForms()}};this.tabPanel.isAnyFormDirty()?this.confirmLostChangePromise(e,this):this.close()}}),Ext.define("SYNO.SDS.SMBService.SMB.AdvancedSettingsTabPanel",{extend:"SYNO.SDS.Utils.TabPanel",constructor:function(e){this.module=e.module,this.smbApiMaxVersion=SYNO.SDS.SMBService.Utils.getSMBAPIMaxVersion(),this.generalTab=new SYNO.SDS.SMBService.SMB.GeneralTab({module:this.module}),this.macTab=new SYNO.SDS.SMBService.SMB.MacTab({module:this.module}),this.othersTab=new SYNO.SDS.SMBService.SMB.OthersTab({module:this.module}),this.smbConfig=this.fillSmbConfigTable();var t={itemId:"advanced_settings_tabpanel",autoHeight:!0,activeTab:0,useDefaultBtn:!1,items:[this.generalTab,this.macTab,this.othersTab]};t=Ext.apply(t,e),this.callParent([t])},onShow:function(){let e=SYNO.SDS.SMBService.Utils.getSMBAPI("get");var t={api:"SYNO.Core.FileServ.ServiceDiscovery",method:"get",version:1},i={api:"SYNO.Core.Network.Bond",method:"list",version:2};this.setStatusBusy({text:_T("common","loading")}),this.sendWebAPI({scope:this,compound:{params:[e,t,i]},callback:function(n,s,o){if(this.clearStatusBusy(),n){for(var a=SYNO.API.Response.GetValByAPI(s,e.api,e.method),l=this.getAllForms(),r=0;r<l.length;++r)l[r].setValues(a);this.loadAllConfirmHook(a),3===this.smbApiMaxVersion&&this.generalTab.updateSMBProtcolStatus(),this.enableSMBTimeMachine=SYNO.API.Response.GetValByAPI(s,t.api,t.method,"enable_smb_time_machine");let n=SYNO.API.Response.GetValByAPI(s,i.api,i.method);this.networkBondCreated=0!==n.length,this.updateAllPanelFields()}}})},loadAllConfirmHook:function(e){var t=this.items.items;if(Ext.isObject(e))for(var i=0;i<t.length;++i)"function"==typeof t[i].loadConfirmHook&&t[i].loadConfirmHook(e)},updateAllPanelFields:function(e){for(var t=this.items.items,i=0;i<t.length;++i)"function"==typeof t[i].updateFields&&t[i].updateFields()},fillSmbConfigTable:function(){return{wins:{idx:0},smb_max_protocol:{idx:0},smb_min_protocol:{idx:0},smb_encrypt_transport:{idx:0},enable_server_signing:{idx:0},enable_op_lock:{idx:0},enable_smb2_leases:{idx:0},enable_smb3_directory_leasing:{idx:0},smb3_directory_leasing_home_only:{idx:0},enable_durable_handles:{idx:0},enable_syno_catia:{idx:1},enable_fruit_locking:{idx:1},enable_local_master_browser:{idx:2},enable_dirsort:{idx:2},enable_vetofile:{idx:2},vetofile:{idx:2},enable_delete_vetofiles:{idx:2},enable_symlink:{idx:2},enable_widelink:{idx:2},enable_reset_on_zero_vc:{idx:2},enable_enhance_log:{idx:2},enable_mask:{idx:2},disable_strict_allocate:{idx:2},enable_ntlmv1_auth:{idx:2},enable_aio_read:{idx:2},enable_synotify:{idx:2},enable_strict_sync:{idx:2},enable_multichannel:{idx:2},syno_wildcard_search:{idx:2},enable_perf_chart:{idx:2}}},applyForms:function(){if(!this.isAnyFormDirty())return this.ownerCt.close(),!1;let e=Ext.id(),t={tm_confirm:!1},i=[{label:_T("network","smb_min_protocol"),warnList:this.getWarnListSMBMinProtocol()},{label:_T("network","smb_enable_ntlmv1_auth"),warnList:this.getWarnListNtlmv1Auth()},{label:_T("network","smb_max_protocol"),warnList:this.getWarnListSMBMaxProtocol(t)},{label:_T("network","smb_encrypt_transport"),warnList:this.getWarnListEncryptTransport()},{label:SYNO.SDS.SMBService.Utils._S("common","option_server_signing"),warnList:this.getWarnListServerSigning()},{label:SYNO.SDS.SMBService.Utils._S("common","option_enable_smb2_leasing"),warnList:this.getWarnListSMB2Lease(t)},{label:_T("network","enable_durable_handles"),warnList:this.getWarnListDurableHandles(t)},{label:_T("network","smb_enable_syno_catia"),warnList:this.getWarnListSynoCatia()},{label:_T("network","network_lmb_enable"),warnList:this.getWarnListLMB()},{label:_T("network","smb_enable_widelink"),warnList:this.getWarnListWideLink()},{label:_T("network","smb_enhance_log"),warnList:this.getWarnListCollectDebugLog()},{label:_T("network","smb_enable_aio_read"),warnList:this.getWarnListAioRead()},{label:_T("network","smb_enable_strict_sync"),warnList:this.getWarnListStrictSync()},{label:SYNO.SDS.SMBService.Utils._S("common","option_enable_multichannel"),warnList:this.getWarnListMultichannel()},{label:SYNO.SDS.SMBService.Utils._S("common","option_enable_perf_chart"),warnList:this.getWarnListEnablePerfChart()},{warnList:this.getWarnListRestartService()}],n=e=>{let t="";for(const i of e)t+=String.format(!0===i.important?'<font class="red-status">{0}</font>':"{0}",i.msg);return t},s="<b>{0}</b>"+_T("common","colon")+"{1}",o=_T("share","share_encryption_warning_desc")+"<br>",a=!1;for(const e of i){if(!e||0===e.warnList.length)continue;let t;a=!0,t=e.label?String.format(s,e.label,n(e.warnList)):n(e.warnList),o+=this.addAlignedBullet(t)}if(!1===a)return this.submit(),!0;o+="<br>",o+=String.format(SYNO.SDS.SMBService.Utils._S("common","warning_ask_cont"),'<a id="'+e+'" class="link-font" style="cursor:pointer">',"</a>");let l=new SYNO.SDS.SMBService.SMB.AdvancedSettingsConfirmDialog({owner:this.ownerCt,module:this.module,msg:o,onApply:function(){t.tm_confirm&&(this.enableSMBTimeMachine=!1),this.submit()}.bind(this)});return l.show(),l.mon(Ext.get(e),"click",SYNO.SDS.SMBService.Utils.launchHelp),!0},addAlignedBullet:function(e){return String.format('<div style="padding-left:10px;line-height:20px;margin-top:8px;"><ul style="list-style:disc;list-style-position:outside;padding-left:12px"><li>{0}</li></ul></div>',e)},isNeededConfirmBeforeSubmit:function(){var e=!1,t=this.items.items;return e=e||["wins","enable_local_master_browser","enable_op_lock","enable_reset_on_zero_vc","enable_vetofile","vetofile","disable_strict_allocate","syno_wildcard_search","enable_durable_handles","enable_multichannel","enable_smb2_leases","enable_smb3_directory_leasing","smb3_directory_leasing_home_only"].some((function(e){var i=this.smbConfig[e].idx;return t[i].getComponent(e).isDirty()}),this),3===this.smbApiMaxVersion&&(e=e||["smb_max_protocol","smb_min_protocol","smb_encrypt_transport"].some((function(e){var i=this.smbConfig[e].idx;return t[i].getComponent(e).isDirty()}),this)),e},isNeededConfirmTimeMachineBeforeSubmit:function(){var e=this.items.items;return!1!==this.enableSMBTimeMachine&&["enable_durable_handles","enable_smb2_leases","enable_op_lock","smb_max_protocol"].some((function(t){var i=this.smbConfig[t].idx;return"smb_max_protocol"===t?3>e[i].getComponent(t).getValue():!e[i].getComponent(t).checked}),this)},isNeededConfirmSMB1BeforeSubmit:function(){var e=this.items.items,t="smb_min_protocol",i=this.smbConfig[t].idx,n=e[i].getComponent(t).getValue(),s=e[i].getComponent(t).isDirty();return!(0!==n||!s)},isNeededConfirmSMB3BeforeSubmit:function(){var e=this.items.items,t="smb_max_protocol",i=this.smbConfig[t].idx,n=e[i].getComponent(t).getValue(),s=e[i].getComponent(t).isDirty();return!!(3>n&&s)},isNeededConfirmEncryptTransportBeforeSubmit:function(){var e="smb_encrypt_transport",t=this.items.items[this.smbConfig[e].idx].getComponent(e);return!(!t.isDirty()||2!==t.getValue())},isNeededConfirmServerSigningBeforeSubmit:function(){var e="enable_server_signing",t=this.items.items[this.smbConfig[e].idx].getComponent(e);return!(!t.isDirty()||2!==t.getValue())},isNeededConfirmCheckedBeforeSubmit:function(e){var t=this.items.items[this.smbConfig[e].idx].getComponent(e);return!(!t.isDirty()||!t.getValue())},isNeededConfirmUnCheckedBeforeSubmit:function(e){var t=this.items.items[this.smbConfig[e].idx].getComponent(e);return!(!t.isDirty()||t.getValue())},getWarnListSMBMinProtocol:function(){let e=[];return this.isNeededConfirmSMB1BeforeSubmit()&&e.push({important:!0,msg:SYNO.SDS.SMBService.Utils._S("common","warning_enable_smb1")}),e},getWarnListNtlmv1Auth:function(){let e=[];return this.isNeededConfirmCheckedBeforeSubmit("enable_ntlmv1_auth")&&e.push({important:!0,msg:SYNO.SDS.SMBService.Utils._S("common","warning_enable_ntlmv1")}),e},getWarnListSMBMaxProtocol:function(e){let t=[];return!0===this.enableSMBTimeMachine&&this.isNeededConfirmSMB3BeforeSubmit()&&(e.tm_confirm=!0,t.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_disable_smb_time_machine_mdns_smb3")})),t},getWarnListEncryptTransport:function(){let e=[];return this.isNeededConfirmEncryptTransportBeforeSubmit()&&e.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_enable_encrypt")}),e},getWarnListServerSigning:function(){let e=[];return this.isNeededConfirmServerSigningBeforeSubmit()&&e.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_enable_affect_perf")}),e},getWarnListSMB2Lease:function(e){let t=[];return!0===this.enableSMBTimeMachine&&(this.isNeededConfirmUnCheckedBeforeSubmit("enable_op_lock")||this.isNeededConfirmUnCheckedBeforeSubmit("enable_smb2_leases"))&&(e.tm_confirm=!0,t.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_disable_smb_time_machine_mdns")})),t},getWarnListDurableHandles:function(e){let t=[];return!0===this.enableSMBTimeMachine&&this.isNeededConfirmUnCheckedBeforeSubmit("enable_durable_handles")&&(e.tm_confirm=!0,t.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_disable_smb_time_machine_mdns")})),t},getWarnListSynoCatia:function(){let e=[];return this.isNeededConfirmCheckedBeforeSubmit("enable_syno_catia")?e.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_enable_catia")}):this.isNeededConfirmUnCheckedBeforeSubmit("enable_syno_catia")&&e.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_disable_catia")}),e},getWarnListLMB:function(){let e=[];return this.isNeededConfirmCheckedBeforeSubmit("enable_local_master_browser")&&e.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_enable_lmb")}),e},getWarnListWideLink:function(){let e=[];return this.isNeededConfirmCheckedBeforeSubmit("enable_widelink")&&e.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_enable_widelink")}),e},getWarnListCollectDebugLog:function(){let e=[];return this.isNeededConfirmCheckedBeforeSubmit("enable_enhance_log")&&e.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_enable_affect_perf")}),e},getWarnListAioRead:function(){let e=[];return this.isNeededConfirmCheckedBeforeSubmit("enable_aio_read")&&e.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_enable_affect_perf")}),e},getWarnListStrictSync:function(){let e=[];return this.isNeededConfirmCheckedBeforeSubmit("enable_strict_sync")&&e.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_enable_affect_perf")}),e},getWarnListMultichannel:function(){let e=[];return this.isNeededConfirmCheckedBeforeSubmit("enable_multichannel")&&e.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_enable_multichannel")}),e},getWarnListEnablePerfChart:function(){let e=[];return this.isNeededConfirmCheckedBeforeSubmit("enable_perf_chart")&&e.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_enable_perf_chart")}),e},getWarnListRestartService:function(){let e=[];return this.isNeededConfirmBeforeSubmit()&&e.push({msg:SYNO.SDS.SMBService.Utils._S("common","warning_service_restart")}),e},submit:function(){for(var e=this.getAllForms(),t={},i=0;i<e.length;++i){if(!e[i].isValid())return this.ownerCt.setStatusError({text:_T("common","forminvalid"),clear:!0}),!1;t=Object.assign(t,e[i].getValues())}t.enable_smb2_leases=this.generalTab.getComponent("enable_smb2_leases").getValue(),t.enable_smb3_directory_leasing=this.generalTab.getComponent("enable_smb3_directory_leasing").getValue(),t.enable_widelink=this.othersTab.getComponent("enable_widelink").getValue(),t.enable_delete_vetofiles=this.othersTab.getComponent("enable_delete_vetofiles").getValue();let n=SYNO.SDS.SMBService.Utils.getSMBAPI("set",t);var s={api:"SYNO.Core.FileServ.ServiceDiscovery",method:"set",version:1,params:{enable_smb_time_machine:this.enableSMBTimeMachine}};this.ownerCt.setStatusBusy(),this.sendWebAPI({compound:{params:[n,s]},scope:this,callback:function(e,t,i){if(this.ownerCt.clearStatusBusy(),e)return this.ownerCt.close(),this.module.panel.advTab.loadForm(),!0;this.ownerCt.setStatusError()}})}}),Ext.define("SYNO.SDS.SMBService.SMB.AdvancedSettingsConfirmDialog",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){let t=new SYNO.ux.Panel({autoFlexcroll:!0,items:[{xtype:"syno_displayfield",htmlEncode:!1,value:e.msg}]});var i=Ext.apply({cls:"x-window-dlg",closable:!1,resizable:!1,draggable:!1,elements:"body",padding:"24px 30px 0 30px",width:660,autoHeight:!0,fbar:[{xtype:"syno_button",itemId:"cancel",text:_T("common","no"),handler:this.close,scope:this},{xtype:"syno_button",itemId:"apply",text:_T("common","yes"),btnStyle:"blue",handler:function(){Ext.isFunction(this.onApply)&&this.onApply(),this.close()},scope:this}],items:[t],listeners:{scope:this,activate:{fn:function(){const e=t.getHeight(),i=this.getHeight(),n=i-e;i>=660?t.setHeight(660-n):t.setHeight(e)}}}},e);this.callParent([i])}}),Ext.define("SYNO.SDS.SMBService.SMB.SmbLogSettingDialog",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){this.module=e.module,this.panel=this.configForm();var t=Ext.apply({title:_T("service","transfer_log_settings"),autoDestroy:!0,resizable:!1,width:552,height:240,autoHeight:!0,layout:"fit",border:!1,closeAction:"cancelHandler",items:[this.panel],buttons:[{btnStyle:"grey",text:_T("common","cancel"),scope:this,handler:this.cancelHandler},{btnStyle:"blue",disabled:this._S("demo_mode"),tooltip:this._S("demo_mode")?_JSLIBSTR("uicommon","error_demo"):"",text:_T("common","save"),scope:this,handler:this.applyHandler}]},e);this.callParent([t]),this.mon(this,"show",this.load,this)},configForm:function(){var e={border:!1,height:187,padding:0,items:[{xtype:"syno_displayfield",value:_T("service","transfer_log_settings_desc")},{xtype:"syno_compositefield",hideLabel:!0,items:[{xtype:"syno_checkbox",name:"create",width:"160",hight:"28",boxLabel:_T("service","transfer_log_create")},{xtype:"syno_checkbox",name:"write",width:"160",hight:"28",boxLabel:_T("service","transfer_log_write")},{xtype:"syno_checkbox",name:"move",width:"160",hight:"28",boxLabel:_T("service","transfer_log_move")}]},{xtype:"syno_compositefield",hideLabel:!0,items:[{xtype:"syno_checkbox",name:"delete",width:"160",hight:"28",boxLabel:_T("service","transfer_log_delete")},{xtype:"syno_checkbox",name:"read",width:"160",hight:"28",boxLabel:_T("service","transfer_log_read")},{xtype:"syno_checkbox",name:"rename",width:"160",hight:"28",boxLabel:_T("service","transfer_log_rename")}]},{xtype:"syno_compositefield",hideLabel:!0,items:[{xtype:"syno_checkbox",name:"permission change",width:"160",hight:"28",boxLabel:_T("service","transfer_log_permission_change")}]}]};return new SYNO.SDS.Utils.FormPanel(e)},applyHandler:function(){var e=this.panel.getForm();if(!e.isDirty())return this.close(),!1;this.getMsgBox().confirm(_T("tree","leaf_winmacnfs"),_T("network","service_restart_warning")+" "+_T("common","ask_cont"),(function(t,i,n){"yes"==t&&this.submit(e)}),this)},submit:function(e){var t={};["create","write","move","delete","read","rename","permission change"].forEach((function(i){e.findField(i).getValue()?t[i]="1":t[i]="0"})),this.setStatusBusy({text:_T("common","loading")}),this.sendWebAPI({scope:this,api:"SYNO.Core.SyslogClient.FileTransfer",method:"set_level",version:1,params:{protocol:"cifs",loglevel:t},callback:function(e,t,i){if(this.clearStatusBusy(),e)return this.close(),!0;this.setStatusError()}})},cancelHandler:function(){var e={dontSave:function(){this.close()},cancel:Ext.emptyFn,save:function(){this.applyHandler()}};this.panel.getForm().isDirty()?this.confirmLostChangePromise(e,this):this.close()},load:function(){this.setStatusBusy({text:_T("common","loading")}),this.sendWebAPI({scope:this,api:"SYNO.Core.SyslogClient.FileTransfer",method:"get_level",version:1,params:{protocol:"cifs"},callback:function(e,t,i){this.clearStatusBusy(),e&&this.panel.getForm().setValues(t)}})}}),Ext.define("SYNO.SDS.SMBService.SMB.MsdfsRulesDialog",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){this.owner=e.owner,this.module=e.module,this.gridPanel=new SYNO.SDS.SMBService.SMB.MsdfsRulesGrid({owner:this,module:this.module});let t=Ext.apply(this.fillConfig(),e);this.callParent([t])},fillConfig:function(){return{title:SYNO.SDS.SMBService.Utils._S("common","msdfs_rule"),autoDestroy:!0,closeAction:"cancelHandler",height:500,width:800,minWidth:800,autoHeight:!0,layout:"fit",items:[this.gridPanel],buttons:[{btnStyle:"grey",text:_T("common","alt_cancel"),scope:this,handler:this.cancelHandler},{btnStyle:"blue",disabled:this._S("demo_mode"),tooltip:this._S("demo_mode")?_JSLIBSTR("uicommon","error_demo"):"",text:_T("common","save"),scope:this,handler:this.applyHandler}],listeners:{close:this.stopPollingTestStatus,scope:this}}},cancelHandler:function(){let e={dontSave:function(){this.close()},cancel:Ext.emptyFn,save:function(){this.applyHandler()}};this.gridPanel.isDirty()?this.confirmLostChangePromise(e,this):this.close()},applyHandler:function(){if(!this.gridPanel.isDirty())return this.close(),!1;this.submit()},submit:function(){this.setStatusBusy({text:_T("common","loading")});let e=this.gridPanel.getRules();this.sendWebAPI({api:"SYNO.Core.FileServ.SMB.MSDFS",method:"set",version:1,scope:this,params:e,callback:function(e,t,i){if(this.clearStatusBusy(),e)this.close();else{let e=SYNO.SDS.SMBService.Utils.getErrorString(t.code);this.getMsgBox().alert("",e)}}})},stopPollingTestStatus:function(){this.pollingId&&(this.pollUnreg(this.pollingId),this.pollingId=void 0),this.taskId&&(this.sendWebAPI({api:"SYNO.Core.FileServ.SMB.MSDFS",method:"test_stop",version:1,scope:this,params:{task_id:this.taskId}}),this.taskId=void 0)},onShow:function(){let e={api:"SYNO.Core.Directory.LDAP",method:"get",version:2},t={api:"SYNO.Core.Directory.Domain",method:"get",version:1};this.setStatusBusy(),this.sendWebAPI({scope:this,compound:{params:[e,t]},callback:function(i,n,s){if(this.clearStatusBusy(),!i)return void SYNO.Debug("failed to get directory service info");let o=SYNO.API.Response.GetValByAPI(n,e.api,e.method,"enable_client"),a=SYNO.API.Response.GetValByAPI(n,t.api,t.method,"enable_domain");this.DirSrvJoined=o||a}})}}),Ext.define("SYNO.SDS.SMBService.SMB.MsdfsRulesGrid",{extend:"SYNO.ux.GridPanel",constructor:function(e){this.owner=e.owner,this.module=e.module,this.rulesData=new SYNO.SDS.SMBService.SMB.MsdfsRulesData({owner:this,window:this.owner}),this.enableColumn=new SYNO.ux.EnableColumn({header:_T("common","enabled"),dataIndex:"enabled",enableFastSelectAll:!0,menuDisabled:!0,sortable:!1,width:60,align:"center",tooltip:_T("common","enabled"),listeners:{selectall:{fn:this.updateBtnStatus,scope:this},click:{fn:this.updateBtnStatus,scope:this}}});let t=Ext.apply(this.fillConfig(),e);this.callParent([t])},fillConfig:function(){return{itemId:"msdfs_rules",height:290,enableColumnMove:!1,enableHdMenu:!1,viewConfig:{markDirty:!1,emptyText:['<div class="syno-dataview">','<div class="empty-text-wrap">','<div class="empty-text-icon"></div>','<div class="empty-text">',_T("common","no_item"),"</div>","</div>","</div>"].join("")},selModel:new Ext.grid.RowSelectionModel({singleSelect:!1,listeners:{selectionchange:{fn:this.updateBtnStatus,buffer:50,scope:this}}}),store:this.rulesData.msdfsRulesStore,plugins:[this.enableColumn],cm:this.createColumnModel(),autoExpandColumn:"source_folder",tbar:this.createTBar(),bbar:this.createBBar(),listeners:{rowdblclick:function(){1!==this.getSelectionModel().getCount()||this.connectionTesting||this.openRuleDialog("edit")},scope:this}}},initEvents:function(){this.callParent(arguments),this.mon(this.owner,"show",this.onShow,this),this.mon(this.rulesData.msdfsRulesStore,"add",this.onUpdateMsdfsRulesStore,this),this.mon(this.rulesData.msdfsRulesStore,"remove",this.onUpdateMsdfsRulesStore,this),this.mon(this.rulesData.msdfsRulesStore,"update",this.onUpdateMsdfsRulesStore,this)},updateBtnStatus:function(){let e=this.isDirty(),t=this.getSelectionModel().getCount();this.setBtn("edit_btn",1===t&&!this.connectionTesting),this.setBtn("delete_btn",1<=t&&!this.connectionTesting),this.setBtn("test_conn_btn",!e&&!this.connectionTesting),e?this.getBtn("test_conn_btn").setTooltip(SYNO.SDS.SMBService.Utils._S("common","msdfs_apply_before_test")):this.getBtn("test_conn_btn").setTooltip("")},setBtn:function(e,t){let i=this.getBtn(e);i&&i.setDisabled(!t)},getBtn:function(e){return this.getTopToolbar().getComponent(e)},createColumnModel:function(){return new Ext.grid.ColumnModel({defaults:{sortable:!0},columns:[this.enableColumn,{dataIndex:"local_path",header:SYNO.SDS.SMBService.Utils._S("common","msdfs_local_path_header"),tooltip:SYNO.SDS.SMBService.Utils._S("common","msdfs_local_path_header"),renderer:function(e,t,i){let n=Ext.util.Format.htmlEncode(e);return t.attr=`ext:qtip="${Ext.util.Format.htmlEncode(n)}"`,n}},{dataIndex:"remote_path",header:SYNO.SDS.SMBService.Utils._S("common","msdfs_remote_path_header"),tooltip:SYNO.SDS.SMBService.Utils._S("common","msdfs_remote_path_header"),renderer:function(e,t,i){let n=Ext.util.Format.htmlEncode(e);return t.attr=`ext:qtip="${Ext.util.Format.htmlEncode(n)}"`,n}},{dataIndex:"test_result",width:60,header:SYNO.SDS.SMBService.Utils._S("common","msdfs_test_result_header"),tooltip:SYNO.SDS.SMBService.Utils._S("common","msdfs_test_result_header"),renderer:function(e,t){const i='<span class="red-status">'+SYNO.SDS.SMBService.Utils._S("report","status_fail")+'</span><span class="syno-ux-whitetip-icon" ext:wtip="{0}"></span>';switch(e){case"testing":return'<span class="blue-status">'+SYNO.SDS.SMBService.Utils._S("service","service_testing")+"...</span>";case"success":return'<span class="green-status">'+SYNO.SDS.SMBService.Utils._S("common","msdfs_test_success")+"</span>";case"error":return'<span class="red-status">'+SYNO.SDS.SMBService.Utils._S("error","error_error")+"</span>";case"remote_conn_failed":return String.format(i,SYNO.SDS.SMBService.Utils._S("common","msdfs_test_remote_conn_failed"));case"remote_auth_failed":return String.format(i,SYNO.SDS.SMBService.Utils._S("common","msdfs_test_remote_auth_failed"));case"remote_path_missing":return String.format(i,SYNO.SDS.SMBService.Utils._S("common","msdfs_test_remote_path_missing"));case"remote_path_nopriv":return String.format(i,String.format(SYNO.SDS.SMBService.Utils._S("common","msdfs_test_remote_path_nopriv"),`<b>${this.testUser}</b>`));case"local_path_missing":return String.format(i,SYNO.SDS.SMBService.Utils._S("common","msdfs_test_local_path_missing"));case"local_path_nopriv":return String.format(i,String.format(SYNO.SDS.SMBService.Utils._S("common","msdfs_test_local_path_nopriv"),`<b>${this.testUser}</b>`));case"local_path_invalid":return String.format(i,SYNO.SDS.SMBService.Utils._S("common","msdfs_test_local_path_invalid"));default:return SYNO.SDS.SMBService.Utils._S("common","msdfs_test_noresult")}}.bind(this)}]})},createTBar:function(){return this.searchField=new SYNO.ux.TextFilter({iconStyle:"filter",itemId:"search",localFilter:!0,localFilterField:["local_path","remote_path"],blOr:!0,emptyText:_T("common","filter_label_text"),store:this.rulesData.msdfsRulesStore}),new Ext.Toolbar({defaultType:"syno_button",items:[{text:_T("common","create"),itemId:"create_btn",tooltip:_T("common","create"),scope:this,handler:function(e,t){this.owner.DirSrvJoined?0<this.rulesData.data.max_rules&&this.rulesData.data.max_rules<=this.rulesData.msdfsRulesStore.getCount()?this.owner.getMsgBox().alert("",String.format(SYNO.SDS.SMBService.Utils._S("common","msdfs_reach_rules_max"),this.rulesData.data.max_rules)):this.openRuleDialog("add"):this.alertJoinDirSrv()}},{text:_T("common","alt_edit"),itemId:"edit_btn",tooltip:_T("common","alt_edit"),disabled:!0,scope:this,handler:function(e,t){1===this.getSelectionModel().getCount()&&this.openRuleDialog("edit")}},{text:_T("common","delete"),itemId:"delete_btn",tooltip:_T("common","delete"),disabled:!0,scope:this,handler:function(){let e=this.getSelectionModel().getSelections();0<e.length&&(this.rulesData.dataDirty=!0);for(let t=0;t<e.length;++t)this.rulesData.msdfsRulesStore.remove(e[t])}},{text:SYNO.SDS.SMBService.Utils._S("common","msdfs_test_conn"),itemId:"test_conn_btn",tooltip:SYNO.SDS.SMBService.Utils._S("common","msdfs_test_conn"),scope:this,handler:this.queryTestAccount},"->",this.searchField]})},alertJoinDirSrv:function(){let e='<a href="" class="link-font" id="'+Ext.id()+'">'+_T("directory_service","directory_service_title")+"</a>",t=this.owner.getMsgBox().alert("",String.format(SYNO.SDS.SMBService.Utils._S("common","msdfs_no_dirsrv"),e)).msgEl.first("a");t&&this.mon(t,"click",function(e){e.preventDefault(),this.owner.close(),SYNO.SDS.AppLaunch("SYNO.SDS.AdminCenter.Application",{fn:"SYNO.SDS.AdminCenter.DirectoryService.Main"})}.bind(this))},queryTestAccount:function(){if(!this.owner.DirSrvJoined)return void this.alertJoinDirSrv();new SYNO.SDS.SMBService.SMB.MsdfsTestAccountDialog({owner:this.owner,module:this.module,callback:this.testConnection,scope:this}).open()},testConnection:function(e,t){let i=[],n=this.getSelectionModel().getSelections();0>=n.length&&(n=[],this.rulesData.msdfsRulesStore.each((e=>{n.push(e)}))),n&&(n.forEach((e=>{i.push({enabled:e.get("enabled"),link_name:e.get("link_name"),link_to:e.get("link_to"),server:e.get("source_server"),share:e.get("source_folder")}),e.set("test_result","testing")})),this.connectionTesting=!0,this.testUser=e,this.updateBtnStatus(),this.sendWebAPI({api:"SYNO.Core.FileServ.SMB.MSDFS",method:"test_start",version:1,scope:this,params:{rules:i,username:e,password:t},encryption:["password"],callback:function(e,t,i){if(!e){let e=SYNO.SDS.SMBService.Utils.getErrorString(t.code);return this.owner.getMsgBox().alert("",e),void n.forEach((e=>{e.set("test_result","-")}))}this.owner.taskId=t.task_id,this.owner.pollingId=this.pollReg({webapi:{api:"SYNO.Core.FileServ.SMB.MSDFS",method:"test_status",version:1,params:{task_id:t.task_id}},interval:1,immediate:!0,status_callback:function(e,t,i,s){if(!e){let e=SYNO.SDS.SMBService.Utils.getErrorString(t.code);return this.owner.getMsgBox().alert("",e),n.forEach((e=>{e.set("test_result","-")})),void this.stopTestStatus()}this.updateTestStatus(t.data),t.finish&&this.stopTestStatus()},scope:this})}}))},stopTestStatus:function(){this.connectionTesting=!1,this.updateBtnStatus(),this.owner.stopPollingTestStatus()},updateTestStatus:function(e){Array.isArray(e)&&e.forEach((e=>{let t=this.rulesData.msdfsRulesStore.findBy((t=>t.get("link_name")===e.link_name&&t.get("link_to")===e.link_to));this.rulesData.msdfsRulesStore.getAt(t).set("test_result",e.result)}))},createBBar:function(){return new SYNO.SDS.SMBService.SMB.MsdfsRulesGridPageLessToolBar({store:this.rulesData.msdfsRulesStore,showRefreshBtn:!1})},onShow:function(){this.rulesData.loadData()},onUpdateMsdfsRulesStore:function(){this.updateBtnStatus()},openRuleDialog:function(e){new SYNO.SDS.SMBService.SMB.MsdfsRuleAddEditDialog({owner:this.owner,module:this.module,gridRules:this,mode:e}).open()},isDirty:function(){return this.rulesData.isDirty()},getRules:function(){return this.rulesData.getData()}}),Ext.define("SYNO.SDS.SMBService.SMB.MsdfsTestAccountDialog",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){this.panel=this.createPanel();let t=Ext.apply(this.fillConfig(),e);this.callParent([t])},fillConfig:function(){return{autoDestroy:!0,resizable:!1,autoHeight:!0,width:520,title:SYNO.SDS.SMBService.Utils._S("common","msdfs_test_conn"),layout:"fit",items:this.panel,buttons:[{btnStyle:"grey",text:_T("common","alt_cancel"),scope:this,handler:this.close},{btnStyle:"blue",text:_T("common","alt_apply"),scope:this,handler:this.onApply}]}},createPanel:function(){return new SYNO.SDS.Utils.FormPanel({padding:0,items:[{xtype:"syno_displayfield",value:SYNO.SDS.SMBService.Utils._S("common","msdfs_test_conn_desc")},{xtype:"syno_textfield",fieldLabel:SYNO.SDS.SMBService.Utils._S("common","msdfs_dirsrv_account"),width:200,maxLength:64,allowBlank:!1,vtype:"username_ext",id:"username"},{xtype:"syno_textfield",fieldLabel:SYNO.SDS.SMBService.Utils._S("common","password"),width:200,maxLength:127,textType:"password",id:"password"}]})},onApply:function(){let e=this.panel.getForm(),t=e.findField("username").getValue(),i=e.findField("password").getValue();this.setStatusBusy(),this.sendWebAPI({api:"SYNO.Core.FileServ.SMB.MSDFS",method:"dirsrv_auth",version:1,scope:this,params:{username:t,password:i},encryption:["password"],callback:function(e,n,s){if(this.clearStatusBusy(),e)n.fullname&&(t=n.fullname),this.callback.call(this.scope,t,i),this.close();else{let e=SYNO.SDS.SMBService.Utils.getErrorString(n.code);this.getMsgBox().alert("",e)}}})}}),Ext.define("SYNO.SDS.SMBService.SMB.MsdfsRuleAddEditDialog",{extend:"SYNO.SDS.ModalWindow",constructor:function(e){this.owner=e.owner,this.module=e.module,this.gridRules=e.gridRules,this.mode=e.mode,this.panel=this.createPanel(this.mode);let t=Ext.apply(this.fillConfig(),e);this.callParent([t]),this.mon(this,"beforeShow",(function(){"add"===this.mode?this.setTitle(SYNO.SDS.SMBService.Utils._S("common","msdfs_create_title")):"edit"===this.mode&&(this.setTitle(SYNO.SDS.SMBService.Utils._S("common","msdfs_edit_title")),this.panel.getForm().setValues(this.gridRules.getSelectionModel().getSelected().data),this.setLocalFullPath(this.panel.getForm().findField("link_to").getValue(),this.panel.getForm().findField("link_name").getValue()))}),this,{single:!0}),this.linkToTextField=Ext.getCmp(this.linkToTextFieldId),this.linkToTextField.getEl().on("mouseup",this.selectBrowse,this),this.panel.getForm().findField("local_path_win").getEl().on("click",this.selectAllText,this),this.panel.getForm().findField("local_path_mac").getEl().on("click",this.selectAllText,this)},fillConfig:function(){return{owner:this.owner,autoDestroy:!0,resizable:!1,width:680,autoHeight:!0,layout:"fit",border:!1,items:this.panel,buttons:[{btnStyle:"grey",text:_T("common","alt_cancel"),scope:this,handler:this.close},{btnStyle:"blue",text:_T("common","alt_apply"),scope:this,handler:this.updateGridRules}]}},updateGridRules:function(){let e,t,i=this.panel.getForm();this.validateForm(i)&&("edit"!==this.mode||i.findField("link_to").isDirty()||i.findField("link_name").isDirty()?(t=this.getRecordsInForm(),0<=this.gridRules.rulesData.msdfsRulesStore.findBy((e=>e.get("link_name")===t.get("link_name")&&e.get("link_to")===t.get("link_to")))?this.getMsgBox().alert("",SYNO.SDS.SMBService.Utils._S("common","msdfs_local_link_exists")):("add"===this.mode?(this.gridRules.rulesData.msdfsRulesStore.add(t),this.gridRules.rulesData.dataDirty=!0):"edit"===this.mode&&(e=this.gridRules.getSelectionModel().getSelected(),e.set("enabled",t.get("enabled")),e.set("link_name",t.get("link_name")),e.set("link_to",t.get("link_to")),e.set("source_server",t.get("source_server")),e.set("source_folder",t.get("source_folder")),e.set("local_path",t.get("local_path")),e.set("remote_path",t.get("remote_path"))),this.close())):this.close())},validateForm:function(e){return e.isValid()},getRecordsInForm:function(){let e=this.panel.getForm(),t=this.serverInfo?this.serverInfo.server:e.findField("source_server").getValue(),i={enabled:e.findField("enabled").getValue(),link_name:e.findField("link_name").getValue(),link_to:e.findField("link_to").getValue(),source_server:t,source_folder:e.findField("source_folder").getValue()};return i.local_path=`${i.link_to}/${i.link_name}`,i.remote_path=`\\\\${i.source_server}\\${i.source_folder}`,new this.gridRules.rulesData.msdfsRulesStore.recordType(i)},createPanel:function(e){this.serverStore=this.getServerStore();let t="add"===e?[{xtype:"syno_combobox",fieldLabel:SYNO.SDS.SMBService.Utils._S("common","msdfs_server_name"),emptyText:SYNO.SDS.SMBService.Utils._S("common","msdfs_server_format_example"),maskRe:/[-_./:0-9a-zA-Z]/,editable:!0,allowBlank:!1,width:292,maxLength:64,id:"source_server",name:"source_server",tpl:'<tpl for="."><div ext:qtip="{display}" class="x-combo-list-item">{display}</div></tpl>',displayField:"display",valueField:"hostname",store:this.serverStore,validationEvent:"keyup",validator:this.serverValidator.bind(this),listeners:{scope:this,expand:this.onServerExpand,blur:this.onServerBlur}},{xtype:"syno_compositefield",fieldLabel:SYNO.SDS.SMBService.Utils._S("common","msdfs_auth"),items:[{xtype:"syno_displayfield",name:"login_user",hidden:!0},{xtype:"syno_button",text:SYNO.SDS.SMBService.Utils._S("common","msdfs_login"),handler:this.onLoginBtnClick,listeners:{afterrender:function(e){SYNO.ux.AddTip(e,SYNO.SDS.SMBService.Utils._S("common","msdfs_login_tip"))}},scope:this}]},{xtype:"syno_combobox",fieldLabel:SYNO.SDS.SMBService.Utils._S("common","msdfs_remote_folder"),editable:!1,allowBlank:!1,width:292,name:"source_folder",tpl:'<tpl for="."><div ext:qtip="{field1}" class="x-combo-list-item">{field1}</div></tpl>',mode:"local",store:[],listeners:{scope:this,beforequery:this.onShareBeforeQuery}}]:[{xtype:"syno_displayfield",fieldLabel:SYNO.SDS.SMBService.Utils._S("common","msdfs_server_name"),name:"source_server"},{xtype:"syno_displayfield",fieldLabel:SYNO.SDS.SMBService.Utils._S("common","msdfs_remote_folder"),name:"source_folder"}],i={defaults:{labelWidth:200},items:[{xtype:"syno_fieldset",collapsible:!1,title:SYNO.SDS.SMBService.Utils._S("common","msdfs_local_path_header"),items:[{xtype:"syno_compositefield",fieldLabel:SYNO.SDS.SMBService.Utils._S("common","msdfs_local_link_folder"),items:[{xtype:"syno_textfield",width:292,name:"link_to",id:this.linkToTextFieldId=Ext.id(),allowBlank:!1,readOnly:!0,validationEvent:!1,validateOnBlur:!1},{xtype:"syno_button",text:SYNO.SDS.SMBService.Utils._S("common","browse"),scope:this,handler:this.selectBrowse}]},{fieldLabel:SYNO.SDS.SMBService.Utils._S("common","msdfs_local_link_name"),xtype:"syno_textfield",width:292,maxlength:255,allowBlank:!1,name:"link_name",validator:function(e){return!e||!e.match(/^\.$|^\.\.$|^\._|[/:]+/)||SYNO.SDS.SMBService.Utils._S("common","msdfs_link_name_invalid")},validationEvent:"keyup",enableKeyEvents:!0,listeners:{scope:this,afterrender:function(e){SYNO.ux.AddTip(e,SYNO.SDS.SMBService.Utils._S("common","msdfs_link_name_tip"))},keyup:this.onLocalNameChange}},{xtype:"syno_displayfield",fieldLabel:SYNO.SDS.SMBService.Utils._S("common","msdfs_local_full_path_win"),cls:"allowDefCtxMenu selectabletext",style:"overflow: hidden; text-overflow: ellipsis; white-space: nowrap;",htmlEncode:!1,value:"-",width:292,name:"local_path_win"},{xtype:"syno_displayfield",fieldLabel:SYNO.SDS.SMBService.Utils._S("common","msdfs_local_full_path_mac"),cls:"allowDefCtxMenu selectabletext",style:"overflow: hidden; text-overflow: ellipsis; white-space: nowrap;",htmlEncode:!1,value:"-",width:292,name:"local_path_mac"}]},{xtype:"syno_fieldset",collapsible:!1,title:SYNO.SDS.SMBService.Utils._S("common","msdfs_remote_path_header"),items:[t,{xtype:"syno_checkbox",name:"enabled",hidden:!0,checked:!0}]}]};return new SYNO.SDS.Utils.FormPanel(i)},getServerStore:function(){return new SYNO.API.JsonStore({api:"SYNO.Core.Findhost",method:"list",version:1,appWindow:this.appWin,baseParams:{key:["hostname","ip","http","https","osname","status"]},fields:[{name:"display",convert:function(e,t){return t.hostname&&t.ip?`${t.hostname}(${t.ip})`:e},sortType:function(e){return e.toLowerCase()}},{name:"hostname"},{name:"ip"},{name:"http"},{name:"https"},{name:"osname"},{name:"status"}],data:[{display:""}],sortInfo:{field:"display",direction:"ASC"},listeners:{scope:this,load:this.onStoreLoad}})},onStoreLoad:function(e){e.filter([{property:"status",value:1},{property:"osname",value:"DSM"}])},onServerExpand:function(){this.isServerStoreLoaded||(this.isServerStoreLoaded=!0,this.serverStore.load())},onServerBlur:function(){let e=this.getProbeServerParams();if(this.serverInfo&&JSON.stringify(this.serverInfo)!==JSON.stringify(e)){let e=this.panel.getForm();e.findField("login_user").reset(),e.findField("login_user").hide(),e.findField("source_folder").reset(),e.findField("source_folder").getStore().removeAll(),this.panel.doLayout()}},onLoginBtnClick:function(){this.panel.getForm().findField("source_server").isValid()&&(this.setStatusBusy(),this.sendWebAPI({api:"SYNO.Core.FileServ.SMB.MSDFS",method:"get_url",version:1,scope:this,params:this.getProbeServerParams(),callback:function(e,t){if(this.clearStatusBusy(),e)try{synocredential.Issue({url:t.url,forceLegacyMode:!1,mustHaveCredential:!1,session:"dsm_info",appWin:this,callback:this.getRemoteServerInfo.bind(this),redirect_uri:window.location.origin})}catch(e){return SYNO.Debug(e),void this.getMsgBox().alert("",_T("error","error_invalid"))}else this.getMsgBox().alert("",SYNO.SDS.SMBService.Utils.getErrorString(t.code))}}))},getRemoteServerInfo:function(e){if(!e.id||!e.username)return;let t=this.panel.getForm(),i=t.findField("source_folder");this.setStatusBusy(),this.sendWebAPI({api:"SYNO.Core.FileServ.SMB.MSDFS",method:"probe",version:1,scope:this,params:{cred_id:e.id,username:e.username},encryption:["cred_id"],callback:function(n,s,o){this.clearStatusBusy(),this.serverInfo=this.getProbeServerParams(),n?(t.findField("login_user").show(),t.findField("login_user").setValue(e.username),this.panel.doLayout(),i.getStore().loadData(Array.isArray(s.shares)?s.shares:[]),0>=s.shares.length&&this.getMsgBox().alert("",SYNO.SDS.SMBService.Utils._S("common","msdfs_remote_no_share"))):this.getMsgBox().alert("",SYNO.SDS.SMBService.Utils.getErrorString(s.code))}})},onShareBeforeQuery:function(e){let t=this.panel.getForm();t.findField("source_server").isValid()&&t.findField("login_user").getValue()?0>=e.combo.getStore().getCount()&&this.getMsgBox().alert("",SYNO.SDS.SMBService.Utils._S("common","msdfs_remote_no_share")):e.combo.markInvalid(SYNO.SDS.SMBService.Utils._S("common","msdfs_login_first"))},getProbeServerParams:function(){let e=this.panel.getForm().findField("source_server").getValue();e=this.parseServer(e);let t={server:e.host};return e.protocol&&(t.protocol=e.protocol),e.http_port&&(t.http_port=e.http_port),e.https_port&&(t.https_port=e.https_port),t},selectBrowse:function(){void 0===this.pathSelector&&(this.pathSelector=new SYNO.SDS.Utils.FileChooser.Chooser({parent:this,owner:this,enumColdStorage:!0,enumC2Share:!1,needrw:!0,usage:{type:"chooseDir"},title:SYNO.SDS.SMBService.Utils._S("common","select_folder"),folderToolbar:!0,treeFilter:function(e,t){return!t||"/home"!==t.spath&&"remote"!==t.mountType},listeners:{scope:this,choose:function(e,t,i){this.linkToTextField.setValue(t.path),this.onLocalFolderChange(t.path),e.close()},close:function(){delete this.pathSelector}}})),this.pathSelector.show()},selectAllText:function(e,t){window.getSelection().selectAllChildren(t)},onLocalFolderChange:function(e){let t=this.panel.getForm();this.setLocalFullPath(e,t.findField("link_name").getValue())},onLocalNameChange:function(e,t){let i=this.panel.getForm();this.setLocalFullPath(i.findField("link_to").getValue(),e.getValue())},setLocalFullPath:function(e,t){let i=this.panel.getForm();if(e&&t){e=e.replace(/^\/|\/$/g,"");let n=Ext.util.Format.htmlEncode(`\\\\${_S("hostname")}\\${e}\\${t}`),s=Ext.util.Format.htmlEncode(`smb://${_S("hostname")}/${e}/${t}`);i.findField("local_path_win").setValue(`<span ext:qtip="${Ext.util.Format.htmlEncode(n)}">${n}</span>`),i.findField("local_path_mac").setValue(`<span ext:qtip="${Ext.util.Format.htmlEncode(s)}">${s}</span>`)}else i.findField("local_path_win").reset(),i.findField("local_path_mac").reset()},serverValidator:function(e){let t=this.parseServer(e);return["http","https","both"].indexOf(t.protocol)<0?SYNO.SDS.SMBService.Utils._S("common","msdfs_server_bad_url"):["localhost","127.0.0.1","::1"].indexOf(t.host)>=0?SYNO.SDS.SMBService.Utils._S("common","msdfs_no_localhost"):Ext.form.VTypes.fwLooseip(t.host)||Ext.form.VTypes.netbiosName(t.host)||Ext.form.VTypes.FQDN(t.host)?!(t.http_port&&!Ext.form.VTypes.port(t.http_port)||t.https_port&&!Ext.form.VTypes.port(t.https_port))||Ext.form.VTypes.portText:Ext.form.VTypes.iporhostnameText},parseServer:function(e){var t,i,n,s,o="both",a=this.serverStore.findExact("display",e);if(-1!==a){var l=this.serverStore.getAt(a);return{protocol:"both",host:l.get("hostname"),http_port:l.get("http"),https_port:l.get("https")}}return 0<(t=e.indexOf("://"))?(o=e.slice(0,t),t+=3):t=0,0<(i=e.slice(t).lastIndexOf(":"))?(i+=t,s=0<(n=e.indexOf("/",i))?+e.slice(i+1,n):+e.slice(i+1)):0>(i=e.indexOf("/",t))&&(i=e.length),{protocol:o,host:e.slice(t,i),http_port:-1!==["http","both"].indexOf(o)?s:void 0,https_port:-1!==["https","both"].indexOf(o)?s:void 0}}}),Ext.define("SYNO.SDS.SMBService.SMB.MsdfsRulesGridPageLessToolBar",{extend:"SYNO.ux.PageLessToolbar",constructor:function(){this.callParent(arguments)},bindStore:function(e,t){!t&&this.store&&(this.store.un("add",this.onDataChanged,this),this.store.un("remove",this.onDataChanged,this)),e&&(e=Ext.StoreMgr.lookup(e)).on({scope:this,add:this.onDataChanged,remove:this.onDataChanged}),this.callParent(arguments)},updateInfo:function(){Ext.isEmpty(this.displayItem)||this.displayItem.setText(`${this.store.getCount()} ${_JSLIBSTR("uicommon","items")}`)}}),Ext.define("SYNO.SDS.SMBService.SMB.MsdfsRulesData",{constructor:function(e){this.owner=e.owner,this.window=e.window,this.dataDirty=!1,this.data={},this.data.rules=[],this.msdfsRulesStore=new Ext.data.JsonStore({root:"rules",autoDestroy:!0,pruneModifiedRecords:!0,fields:[{name:"enabled",type:"bool"},"link_to","link_name","source_server","source_folder",{name:"local_path",sortType:"asNaturalUCString",convert:function(e,t){return`${t.link_to}/${t.link_name}`}},{name:"remote_path",sortType:"asNaturalUCString",convert:function(e,t){return`\\\\${t.source_server}\\${t.source_folder}`}},{name:"test_result",defaultValue:"-"}],defaultSortable:!0})},loadData:function(){this.window.setStatusBusy(),this.owner.sendWebAPI({api:"SYNO.Core.FileServ.SMB.MSDFS",method:"get",version:1,scope:this,callback:function(e,t){if(!e)return this.window.clearStatusBusy(),void this.window.getMsgBox().alert("",SYNO.SDS.SMBService.Utils._S("common","msdfs_load_rules_failed"));const i=/^(\\\\)([^\\].*)[\\]([^\\].*)/;t.rules.forEach((e=>{let t=e.source_folder.match(i);!t||t.length<3?e.source_server="":(e.source_server=t[2],e.source_folder=t[3])})),this.data=t,this.msdfsRulesStore.loadData(this.data),this.window.clearStatusBusy()}})},getData:function(){this.data.rules=[];let e=this.msdfsRulesStore.getRange();return this.data.rules=e.map((e=>({enabled:e.get("enabled"),link_name:e.get("link_name"),link_to:e.get("link_to"),source_folder:String.format("\\\\{0}\\{1}",e.get("source_server"),e.get("source_folder"))}))),this.data},isDirty:function(){if(this.dataDirty)return!0;let e=!1;return e=this.msdfsRulesStore.getModifiedRecords().some((e=>!e.modified||Object.keys(e.modified).some((e=>"test_result"!==e)))),e}}),SYNO.SDS.SMBService.PkgVer=SYNO.SDS.Config.FnMap["SYNO.SDS.SMBService.Instance"].config.version||SYNO.SDS.Config.FnMap["SYNO.SDS.SMBService.SMB.WinTab"].config.version,SYNO.SDS.StatusNotifier.on("jsconfigLoaded",(function(){if(!SYNO.SDS.StatusNotifier.isAppEnabled("SYNO.SDS.SMBService.Instance"))return;if(SYNO.SDS.Packages.getInfoByPkgId("SMBService").version==SYNO.SDS.SMBService.PkgVer)return;let e=SYNO.SDS.AppMgr.getByAppName("SYNO.SDS.AdminCenter.Application");Ext.each(e,(function(e){e.destroy()}))})),Ext.define("SYNO.SDS.SMBService.SMB.WinTab",{extend:"SYNO.SDS.Utils.FormPanel",constructor:function(e){this.module=e.module;var t=this.fillConfig(e);this.domainEnabled=!1,this.smbTMEnable=!1,this.callParent([t]),this.winHelpBox=Ext.getCmp(this.winHelpBox),this.on("afterlayout",this.onPanelAfterLayout,this,{single:!0})},onPanelAfterLayout:function(e,t){let i=SYNO.SDS.SMBService.Utils.getSMBAPIMaxVersion();if(1===i)this.checkEnableSamba=new SYNO.ux.Utils.EnableCheckGroup(e.getForm(),"enable_samba",["smb_transfer_log_enable","disable_shadow_copy"]);else if(2===i)this.checkEnableSamba=new SYNO.ux.Utils.EnableCheckGroup(e.getForm(),"enable_samba",["enable_smb2","smb_transfer_log_enable","disable_shadow_copy"]);else{this.checkEnableSamba=new SYNO.ux.Utils.EnableCheckGroup(e.getForm(),"enable_samba",["smb_transfer_log_enable","disable_shadow_copy","enable_access_based_share_enum"]),this.checkEnableXferlog=new SYNO.ux.Utils.EnableCheckGroup(e.getForm(),"smb_transfer_log_enable",[this.smbLogSettingsBtnId]);new SYNO.ux.Utils.EnableCheckGroup(e.getForm(),"enable_msdfs",[this.MSDFSRuleBtnId,"msdfs_note"])}e.mon(e.getForm().findField("enable_samba"),"check",(function(e,t){if(2===i){var n=this.getForm().findField("enable_smb2").getValue();this.getForm().findField("enable_large_mtu").setDisabled(!(t&&n))}this.getComponent("winFieldset").getComponent("advanceBtnId").setDisabled(!t),this.getComponent("winFieldset").getComponent("workgroup_in_domain").setDisabled(!t),this.getComponent("winFieldset").getComponent("sambaNoteId").setDisabled(!t),this.setWinHelpBoxVisible(!!t)}),this),"no"!==this._D("support_share_snapshot","no")&&"no"!==this._D("support_btrfs","no")||e.getForm().findField("disable_shadow_copy").hide()},setWinHelpBoxVisible:function(e){this.winHelpBox.setVisible(e),this.doLayout()},fillConfig:function(e){var t={title:_T("network","wnds_file_service"),autoScroll:!0,items:[this.createWinTabObj(e),this.createMSDFSTabObj(e),this.createWSTransferTabObj(e)]};return Ext.apply(t,e),t},createWinTabObj:function(e){var t={xtype:"syno_fieldset",stateId:"SYNO.SDS.SMBService.SMB.WinTab::smb::smb",title:SYNO.SDS.SMBService.Utils._S("common","smb_main_settings_title"),webapi:{api:"SYNO.Core.FileServ.SMB",methods:{get:"get",set:"set"},version:1},itemId:"winFieldset",collapsible:!0,items:[{xtype:"syno_checkbox",name:"enable_samba",itemId:"enable_samba",boxLabel:_T("network","samba_enable"),listeners:{check:{scope:this,fn:this.onSambaCheckHandler}}},{xtype:"syno_textfield",indent:1,style:"text-transform: uppercase;",itemId:"workgroup",name:"workgroup",fieldLabel:_T("network","wnds_group"),vtype:"workgroup",maxlength:15,allowBlank:!1,validator:this.workgroupValidator},{xtype:"syno_displayfield",itemId:"workgroup_in_domain",fieldLabel:"Note",hideLabel:!0,hidden:!0,indent:1,name:"workgroup_in_domain",htmlEncode:!1,value:'<span class="syno-ux-note">'+_T("common","note")+_T("common","colon")+" </span>"+_T("network","workgroup_in_domain")},{xtype:"syno_checkbox",indent:1,name:"enable_smb2_and_large_mtu",boxLabel:_T("network","cifs_smb2_large_mtu_enable")},{xtype:"syno_checkbox",indent:1,name:"disable_shadow_copy",boxLabel:_T("network","smb_disable_shadow_copy")},{xtype:"syno_checkbox",indent:1,name:"enable_access_based_share_enum",boxLabel:_T("network","smb_access_based_share_enum")},{xtype:"syno_checkbox",indent:1,itemId:"smb_transfer_log_enable",name:"smb_transfer_log_enable",boxLabel:_T("service","service_smb_transfer_log"),listeners:{enable:{scope:this,fn:function(e){3<=SYNO.SDS.SMBService.Utils.getSMBAPIMaxVersion()&&(!0===this.getComponent("winFieldset").getComponent("enable_samba").originalValue&&!0===e.originalValue&&Ext.getCmp(this.smbLogBtnId).setDisabled(!1))}},disable:{scope:this,fn:function(){3<=SYNO.SDS.SMBService.Utils.getSMBAPIMaxVersion()&&Ext.getCmp(this.smbLogBtnId).setDisabled(!0)}},check:{scope:this,fn:function(e){3<=SYNO.SDS.SMBService.Utils.getSMBAPIMaxVersion()&&(!0===this.getComponent("winFieldset").getComponent("enable_samba").checked&&!1===e.originalValue&&!0===e.checked&&this.onSmbLogSettingBtnClick())}}}},{xtype:"syno_compositefield",hideLabel:!0,indent:2,items:[{xtype:"syno_button",btnStyle:"default",itemId:"smbCmdBtn",name:"smbCmdBtn",id:this.smbLogSettingsBtnId=Ext.id(),text:_T("service","transfer_log_settings"),autoWidth:!0,scope:this,handler:this.onSmbLogSettingBtnClick},{xtype:"syno_button",btnStyle:"default",itemId:"smbLogBtn",name:"smbLogBtn",id:this.smbLogBtnId=Ext.id(),text:_T("log","log_subtitle"),autoWidth:!0,handler:function(){SYNO.SDS.AppLaunch("SYNO.SDS.LogCenter.BuiltIn",{logType:"fileTransfer",protocol:"smbxfer"})}}]},{xtype:"spacer",height:18},{xtype:"syno_button",btnStyle:"default",name:"advanceBtnId",itemId:"advanceBtnId",text:_T("common","adv_setting"),autoWidth:!0,indent:1,style:{marginBottom:"0px"},scope:this,handler:this.onSmbAdvSettingBtnClick},{xtype:"spacer",height:18},{xtype:"syno_displayfield",itemId:"sambaNoteId",fieldLabel:"Note",hideLabel:!0,indent:1,htmlEncode:!1,value:'<span class="syno-ux-note">'+_T("common","note")+_T("common","colon")+' </span><br><ul style="list-style-type: disc; list-style-position: outside; margin-left: 16px;"><li>'+String.format(_T("share","share_recycle_bin_win_desc"),'<a id="'+Ext.id()+'" class="link-font" href="">'+_T("helptoc","share")+"</a>")+"</li><li>"+String.format(_T("fileindex","fileindex_spotlight_win_desc"),'<a id="'+Ext.id()+'" class="link-font" href="">'+_T("fileindex","indexed_folder_list")+"</a>")+"</li></ul>",listeners:{render:function(e){var t=e.el.select("a"),i=t.item(0);i&&this.mon(i,"click",(function(e){e.preventDefault(),SYNO.SDS.SMBService.SMB.WinTab.Utils.onClickShareUrl(this.module)}),this);var n=t.item(1);n&&this.mon(n,"click",(function(e){e.preventDefault(),SYNO.SDS.SMBService.SMB.WinTab.Utils.onClickFileIndexUrl()}),this)},scope:this,single:!0,buffer:80}},{xtype:"box",hidden:"true",id:this.winHelpBox=Ext.id(),htmlEncode:!1,tpl:new Ext.XTemplate('<div class="syno_fileservice_container"><div><div class="description normal-font" tabIndex="0" aria-labelledby="{this.promptId}"><span id="{this.promptId}">'+_T("network","share_access_prompt")+'</span></div><div class="content" tabIndex="0" aria-labelledby="{this.promptPcId} {this.promptPcHostnameId}"><span id="{this.promptPcId}" class="title normal-font">'+_T("network","share_access_prompt_pc")+" ("+_T("network","windows_explorer")+")"+_T("common","colon")+'</span><span id="{this.promptPcHostnameId}" class="info allowDefCtxMenu link-font" style="text-decoration: none">\\{hostname}</span></div><div class="content" tabIndex="0" aria-labelledby="{this.promptMacId} {this.promptMacHostnameId}"><span id="{this.promptMacId}" class="title normal-font">'+_T("network","share_access_prompt_mac")+" ("+_T("network","mac_finder")+")"+_T("common","colon")+'</span><span id="{this.promptMacHostnameId}" class="info allowDefCtxMenu link-font" style="text-decoration: none">smb://{hostname}</span></div></div></div>',{promptId:Ext.id(),promptPcId:Ext.id(),promptPcHostnameId:Ext.id(),promptMacId:Ext.id(),promptMacHostnameId:Ext.id()})}]};let i=SYNO.SDS.SMBService.Utils.getSMBAPIMaxVersion();if(2===i){var n=[{xtype:"syno_checkbox",indent:1,name:"enable_smb2",boxLabel:_T("network","cifs_smb2_enable"),listeners:{scope:this,check:function(e,t){var i=this.getForm().findField("enable_samba").getValue();this.getForm().findField("enable_large_mtu").setDisabled(!(t&&i))}}},{xtype:"syno_checkbox",indent:2,name:"enable_large_mtu",boxLabel:_T("network","cifs_large_mtu_enable")}];Array.prototype.splice.apply(t.items,[3,1].concat(n)),t.webapi={api:"SYNO.Core.FileServ.SMB",methods:{get:"get",set:"set"},version:2}}else if(3===i){Array.prototype.splice.apply(t.items,[3,1].concat());const e=SYNO.SDS.SMBService.Utils.isSupportHCI();t.webapi={api:e?"SYNO.Core.FileServ.SMB.Cluster":"SYNO.Core.FileServ.SMB",methods:{get:"get",set:"set"},version:e?1:3}}return t},createMSDFSTabObj:function(e){return{xtype:"syno_fieldset",stateId:"SYNO.SDS.SMBService.SMB.WinTab::smb::msdfs",collapsible:!0,hidden:SYNO.SDS.SMBService.Utils.isSupportHCI(),itemId:"msdfs_fieldset",title:SYNO.SDS.SMBService.Utils._S("common","msdfs_title"),items:[{xtype:"syno_displayfield",value:SYNO.SDS.SMBService.Utils._S("common","msdfs_desc")},{xtype:"syno_checkbox",name:"enable_msdfs",itemId:"enable_msdfs",boxLabel:SYNO.SDS.SMBService.Utils._S("common","msdfs_enable")},{xtype:"syno_button",name:"msdfs_rules_btn",itemId:"msdfs_rules_btn",indent:1,id:this.MSDFSRuleBtnId=Ext.id(),text:SYNO.SDS.SMBService.Utils._S("common","msdfs_rule"),scope:this,handler:this.openMsdfsRulesDialog},{xtype:"syno_displayfield",htmlEncode:!1,name:"msdfs_note",indent:1,value:`<span class="syno-ux-note">${_T("common","note")}${_T("common","colon")}</span>`+SYNO.SDS.SMBService.Utils._S("common","msdfs_note")}]}},createWSTransferTabObj:function(e){return{xtype:"syno_fieldset",stateId:"SYNO.SDS.SMBService.SMB.WinTab::smb::wsdiscovery",collapsible:!0,itemId:"wstransfer_fieldset",title:_T("service","wstransfer_title"),items:[{xtype:"syno_displayfield",value:_T("service","enable_wstransfer_desc")},{xtype:"syno_checkbox",boxLabel:_T("service","enable_wstransfer"),itemId:"enable_wstransfer",name:"enable_wstransfer"}]}},openMsdfsRulesDialog:function(){new SYNO.SDS.SMBService.SMB.MsdfsRulesDialog({owner:this.module.appWin,module:this.module}).open()},workgroupValidator:function(e){return!!/^[\x00-\x7F]{0,15}$/.test(e)||_JSLIBSTR("vtype","bad_networkgroupname")},selectHelpText:function(e,t){var i=t.ownerDocument.createRange();i.selectNode(t.firstChild);var n=window.getSelection();n.removeAllRanges(),n.addRange(i)},onSmbLogSettingBtnClick:function(){new SYNO.SDS.SMBService.SMB.SmbLogSettingDialog({module:this.module,owner:this.module.appWin}).open()},onSmbAdvSettingBtnClick:function(){new SYNO.SDS.SMBService.SMB.AdvancedSettingsDialog({module:this.module,owner:this.module.appWin}).open()},onBeforeRequest:function(e){return!0},processParams:function(e,t){var i={};if("set"==e){i=this.getForm().getValues(),this.getForm().findField("smb_transfer_log_enable").isDirty()&&(t=t.concat({api:"SYNO.Core.SyslogClient.FileTransfer",method:"set",version:1,params:{cifs:i.smb_transfer_log_enable}})),this.smbChange=this.getForm().findField("enable_samba").isDirty();var n=this.getForm().findField("enable_samba").checked;this.smbChange&&(this.smbTMEnable=!!n&&this.smbTMEnable,t=t.concat({api:"SYNO.Core.FileServ.ServiceDiscovery",method:"set",version:1,params:{enable_smb_time_machine:this.smbTMEnable}}));let e=this.getForm().findField("enable_msdfs");if(e.isDirty()){let i=t.findIndex((e=>"SYNO.Core.FileServ.SMB"===e.api));0<=i?Ext.apply(t[i].params,{enable_msdfs:e.checked}):SYNO.Debug("no api SYNO.Core.FileServ.SMB found")}var s=this.getComponent("wstransfer_fieldset").getComponent("enable_wstransfer");s.isDirty()&&(t=t.concat({api:"SYNO.Core.FileServ.ServiceDiscovery.WSTransfer",method:"set",version:1,params:{enable_wstransfer:s.checked}}))}return t=(t=(t=(t=(t=(t=t.concat({api:"SYNO.Core.Directory.Domain",method:"get",version:1})).concat({api:"SYNO.Core.FileServ.ServiceDiscovery",method:"get",version:1})).concat({api:"SYNO.Core.SyslogClient.FileTransfer",method:"get",version:1})).concat({api:"SYNO.Core.Network",method:"get",version:1})).concat({api:"SYNO.Core.FileServ.ServiceDiscovery.WSTransfer",method:"get",version:1})).filter((function(e){return!!this.getKnownAPI(e.api)}),this)},processReturnData:function(e,t,i){for(var n=!1,s=!1,o=!1,a={api:"SYNO.Core.FileServ.SMB",method:"get",version:3},l={api:"SYNO.Core.SyslogClient.FileTransfer",method:"get",version:1},r={api:"SYNO.Core.Directory.Domain",method:"get",version:1},c={api:"SYNO.Core.Network",method:"get",version:1},d={api:"SYNO.Core.FileServ.ServiceDiscovery",method:"get",version:1},m={api:"SYNO.Core.FileServ.ServiceDiscovery.WSTransfer",method:"get",version:1},S=0;S<t.result.length;S++)if(!0===SYNO.ux.Utils.checkApiConsistency(l,t.result[S]))n=t.result[S].data.cifs;else if(!0===SYNO.ux.Utils.checkApiConsistency(r,t.result[S]))this.domainEnabled=t.result[S].data.enable_domain;else if(!0===SYNO.ux.Utils.checkApiConsistency(c,t.result[S])){var _=Ext.util.Format.htmlEncode(t.result[S].data.server_name);this.winHelpBox.update({hostname:_}),this.winHelpBox.getEl().on("click",this.selectHelpText,null,{delegate:"span.link-font"})}else!0===SYNO.ux.Utils.checkApiConsistency(d,t.result[S])?this.smbTMEnable=t.result[S].data.enable_smb_time_machine:!0===SYNO.ux.Utils.checkApiConsistency(m,t.result[S])?s=t.result[S].data.enable_wstransfer:!0===SYNO.ux.Utils.checkApiConsistency(a,t.result[S])&&(o=!0===t.result[S].data.enable_msdfs);for(this.getForm().setValues({smb_transfer_log_enable:n,enable_msdfs:o,enable_wstransfer:s}),this.getForm().loadRecords(t.result,i.compound),this.afterLoad(),S=0;S<t.result.length;S++)if("SYNO.Core.FileServ.SMB"===t.result[S].api&&"get"===t.result[S].method){var h=t.result[S].data&&t.result[S].data.enable_adserver;this.getComponent("winFieldset").getComponent("enable_samba").setReadOnly(h),this.addADServerTip(h)}},addADServerTip:function(e){var t=this.getForm().findField("enable_samba");e?t.wrap.dom.setAttribute("ext:qtip",_T("domain","warr_cant_disable_due_to_service")):t.wrap.dom.removeAttribute("ext:qtip")},afterLoad:function(){var e=this.getComponent("winFieldset"),t=e.getComponent("enable_samba").getValue(),i=this.getForm().findField("smb_transfer_log_enable").getValue(),n=t&&i,s=e.getComponent("enable_samba"),o="SYNO.SDS.CMS.Application"===this.findAppWindow().getOpenConfig("className");let a=SYNO.SDS.SMBService.Utils.getSMBAPIMaxVersion();if(this.onSambaCheckHandler(null,null),this.setWinHelpBoxVisible(t),2===a){var l=this.getForm().findField("enable_smb2").getValue();this.getForm().findField("enable_large_mtu").setDisabled(!(t&&l))}e.getComponent("advanceBtnId").setDisabled(!t),e.getComponent("workgroup_in_domain").setDisabled(!t),e.getComponent("sambaNoteId").setDisabled(!t),o?(Ext.getCmp(this.smbLogBtnId).disable(),Ext.getCmp(this.smbLogSettingsBtnId).disable()):(Ext.getCmp(this.smbLogBtnId).setDisabled(!n),Ext.getCmp(this.smbLogSettingsBtnId).setDisabled(!n)),this.domainEnabled?(e.getComponent("workgroup").disable(),e.getComponent("workgroup_in_domain").show(),s.mun(s,"check",this.workgroupHandler,this)):(t?e.getComponent("workgroup").enable():e.getComponent("workgroup").disable(),e.getComponent("workgroup_in_domain").hide(),s.mon(s,"check",this.workgroupHandler,this)),this.sendServiceEvent()},sendServiceEvent:function(){var e=this.getForm();this.smbChange&&SYNO.SDS.StatusNotifier.setServiceDisabled("SYNO.SDS.AdminCenter.WinMacNfs.SAMBA",!e.findField("enable_samba").getValue())},workgroupHandler:function(e,t){var i=this.getComponent("winFieldset").getComponent("workgroup");t?i.enable():i.disable()},onSambaCheckHandler:function(e,t){var i=this.getComponent("winFieldset").getComponent("enable_samba").getValue(),n=this.getComponent("winFieldset").getComponent("sambaNoteId");n.el.set({tabIndex:i?0:-1}),n.originalValue=n.getValue(),this.setMSDFSField(i)},setMSDFSField:function(e){let t=this.getForm().findField("enable_msdfs");t.setDisabled(!e),e?t.wrap.dom.removeAttribute("ext:qtip"):t.wrap.dom.setAttribute("ext:qtip",SYNO.SDS.SMBService.Utils._S("common","msdfs_disabled_reason"))}}),Ext.define("SYNO.SDS.SMBService.SMB.WinTab.Utils",{statics:{onClickShareUrl:function(e){e.app.startModule("SYNO.SDS.AdminCenter.Share.Main")},onClickFileIndexUrl:function(){SYNO.SDS.AppLaunch("SYNO.Finder.Application",{fn:"preference"})}}});