iobroker.admin 7.4.7 → 7.4.9

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.
Files changed (59) hide show
  1. package/README.md +10 -9
  2. package/adminWww/asset-manifest.json +27 -27
  3. package/adminWww/index.html +1 -1
  4. package/adminWww/static/js/1892.3c30ecff.chunk.js.map +1 -1
  5. package/adminWww/static/js/{288.12201160.chunk.js → 288.18e82468.chunk.js} +2 -2
  6. package/adminWww/static/js/288.18e82468.chunk.js.map +1 -0
  7. package/adminWww/static/js/3363.a4c36649.chunk.js.map +1 -1
  8. package/adminWww/static/js/3834.d81ffc60.chunk.js +2 -0
  9. package/adminWww/static/js/3834.d81ffc60.chunk.js.map +1 -0
  10. package/adminWww/static/js/4289.a5fc8b2e.chunk.js +2 -0
  11. package/adminWww/static/js/4289.a5fc8b2e.chunk.js.map +1 -0
  12. package/adminWww/static/js/471.8a82d825.chunk.js.map +1 -1
  13. package/adminWww/static/js/4720.6112531a.chunk.js +2 -0
  14. package/adminWww/static/js/4720.6112531a.chunk.js.map +1 -0
  15. package/adminWww/static/js/5687.d7fa0a4e.chunk.js +2 -0
  16. package/adminWww/static/js/5687.d7fa0a4e.chunk.js.map +1 -0
  17. package/adminWww/static/js/{6361.48a28196.chunk.js → 6361.ec86271d.chunk.js} +2 -2
  18. package/adminWww/static/js/6361.ec86271d.chunk.js.map +1 -0
  19. package/adminWww/static/js/6603.ee9b0df5.chunk.js +3 -0
  20. package/adminWww/static/js/6603.ee9b0df5.chunk.js.map +1 -0
  21. package/adminWww/static/js/6853.6655ed69.chunk.js +2 -0
  22. package/adminWww/static/js/6853.6655ed69.chunk.js.map +1 -0
  23. package/adminWww/static/js/{7137.7b5ca6b5.chunk.js → 7137.c988b7e1.chunk.js} +2 -2
  24. package/adminWww/static/js/7137.c988b7e1.chunk.js.map +1 -0
  25. package/adminWww/static/js/{7424.223daaa3.chunk.js → 7424.5cf79afc.chunk.js} +2 -2
  26. package/adminWww/static/js/7424.5cf79afc.chunk.js.map +1 -0
  27. package/adminWww/static/js/{8144.ae502bba.chunk.js → 8144.5989b02c.chunk.js} +3 -3
  28. package/adminWww/static/js/8144.5989b02c.chunk.js.map +1 -0
  29. package/adminWww/static/js/8387.2cb15163.chunk.js.map +1 -1
  30. package/adminWww/static/js/9823.8a42dea5.chunk.js +3 -0
  31. package/adminWww/static/js/9823.8a42dea5.chunk.js.map +1 -0
  32. package/adminWww/static/js/{main.d26a969d.js → main.dbb63dc9.js} +2 -2
  33. package/adminWww/static/js/{main.d26a969d.js.map → main.dbb63dc9.js.map} +1 -1
  34. package/build-backend/main.js +6 -1
  35. package/build-backend/main.js.map +1 -1
  36. package/io-package.json +27 -27
  37. package/package.json +4 -4
  38. package/adminWww/static/js/288.12201160.chunk.js.map +0 -1
  39. package/adminWww/static/js/3834.2e04eb51.chunk.js +0 -2
  40. package/adminWww/static/js/3834.2e04eb51.chunk.js.map +0 -1
  41. package/adminWww/static/js/4289.e9a5790f.chunk.js +0 -2
  42. package/adminWww/static/js/4289.e9a5790f.chunk.js.map +0 -1
  43. package/adminWww/static/js/4720.72b71322.chunk.js +0 -2
  44. package/adminWww/static/js/4720.72b71322.chunk.js.map +0 -1
  45. package/adminWww/static/js/5687.c249e41f.chunk.js +0 -2
  46. package/adminWww/static/js/5687.c249e41f.chunk.js.map +0 -1
  47. package/adminWww/static/js/6361.48a28196.chunk.js.map +0 -1
  48. package/adminWww/static/js/6603.614b4df4.chunk.js +0 -3
  49. package/adminWww/static/js/6603.614b4df4.chunk.js.map +0 -1
  50. package/adminWww/static/js/6853.cfc24286.chunk.js +0 -2
  51. package/adminWww/static/js/6853.cfc24286.chunk.js.map +0 -1
  52. package/adminWww/static/js/7137.7b5ca6b5.chunk.js.map +0 -1
  53. package/adminWww/static/js/7424.223daaa3.chunk.js.map +0 -1
  54. package/adminWww/static/js/8144.ae502bba.chunk.js.map +0 -1
  55. package/adminWww/static/js/9823.f3f5cd8c.chunk.js +0 -3
  56. package/adminWww/static/js/9823.f3f5cd8c.chunk.js.map +0 -1
  57. /package/adminWww/static/js/{6603.614b4df4.chunk.js.LICENSE.txt → 6603.ee9b0df5.chunk.js.LICENSE.txt} +0 -0
  58. /package/adminWww/static/js/{8144.ae502bba.chunk.js.LICENSE.txt → 8144.5989b02c.chunk.js.LICENSE.txt} +0 -0
  59. /package/adminWww/static/js/{9823.f3f5cd8c.chunk.js.LICENSE.txt → 9823.8a42dea5.chunk.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/js/5687.c249e41f.chunk.js","mappings":"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","sources":["components/CustomModal.tsx","components/FileEditor.tsx","dialogs/FileEditOfAccessControl.tsx","tabs/Files.tsx"],"sourcesContent":["import React, { useEffect, useState, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n TextField,\n Button,\n InputAdornment,\n type Breakpoint,\n} from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon, Language as LanguageIcon } from '@mui/icons-material';\n\nimport { I18n, type IobTheme, Utils } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n modalDialog: {\n minWidth: 400,\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden',\n },\n titleIcon: {\n marginRight: 5,\n },\n content: {\n fontSize: 16,\n },\n languageButton: {\n position: 'absolute',\n right: 8,\n top: 8,\n },\n languageButtonActive: (theme: IobTheme) => ({\n color: theme.palette.primary.main,\n }),\n};\n\ninterface CustomModalProps {\n icon?: React.FC<{ style?: React.CSSProperties }>;\n onClose: () => void;\n children?: JSX.Element | JSX.Element[];\n title?: string;\n titleButtonClose?: string;\n titleButtonApply?: string;\n onApply?: (value: string | number) => void;\n fullWidth?: boolean;\n maxWidth?: Breakpoint;\n applyButton?: boolean;\n disableApplyIfNotChanged?: boolean;\n overflowHidden?: boolean;\n help?: string;\n noTranslation?: boolean;\n toggleTranslation?: () => void;\n textInput?: boolean;\n defaultValue?: string | number;\n progress?: boolean;\n disableApply?: boolean;\n theme: IobTheme;\n}\n\nconst CustomModal = ({\n toggleTranslation,\n noTranslation,\n title,\n fullWidth,\n help,\n maxWidth,\n progress,\n icon,\n disableApplyIfNotChanged,\n applyButton,\n onClose,\n children,\n titleButtonApply,\n titleButtonClose,\n onApply,\n textInput,\n defaultValue,\n overflowHidden,\n disableApply,\n theme,\n}: CustomModalProps): JSX.Element => {\n const [value, setValue] = useState(defaultValue);\n useEffect(() => {\n setValue(defaultValue);\n }, [defaultValue]);\n\n let Icon: React.FC<{ style?: React.CSSProperties }> | null = null;\n\n if (icon) {\n Icon = icon;\n }\n\n const languageButtonActive = Utils.getStyle(theme, styles.languageButtonActive);\n\n return (\n <Dialog\n open={!0}\n maxWidth={maxWidth || 'md'}\n fullWidth={!!fullWidth}\n disableEscapeKeyDown={false}\n onClose={onClose}\n sx={{ '& .MuiPaper-root': styles.modalDialog /* paper: classes.background */ }}\n >\n {title && (\n <DialogTitle>\n {icon ? <Icon style={styles.titleIcon} /> : null}\n {title}\n {I18n.getLanguage() !== 'en' && toggleTranslation ? (\n <IconButton\n size=\"large\"\n style={{ ...styles.languageButton, ...(noTranslation ? languageButtonActive : undefined) }}\n onClick={() => toggleTranslation()}\n title={I18n.t('Disable/Enable translation')}\n >\n <LanguageIcon />\n </IconButton>\n ) : null}\n </DialogTitle>\n )}\n <DialogContent\n style={{ ...(overflowHidden ? styles.overflowHidden : undefined), ...styles.content, paddingTop: 8 }}\n >\n {textInput && (\n <TextField\n // className={className}\n autoComplete=\"off\"\n fullWidth\n autoFocus\n variant=\"standard\"\n size=\"medium\"\n // rows={10}\n multiline\n value={value}\n onChange={e => setValue(e.target.value)}\n slotProps={{\n input: {\n endAdornment: value ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => setValue('')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n // customValue\n />\n )}\n {children}\n {help ? <div>{help}</div> : null}\n </DialogContent>\n <DialogActions>\n {(applyButton === undefined || applyButton) && (\n <Button\n startIcon={<CheckIcon />}\n disabled={disableApply || progress || (disableApplyIfNotChanged && defaultValue === value)}\n onClick={() => onApply && onApply(textInput ? value : '')}\n variant=\"contained\"\n color=\"primary\"\n >\n {I18n.t(titleButtonApply || 'Ok')}\n </Button>\n )}\n <Button\n color=\"grey\"\n onClick={onClose}\n disabled={progress}\n variant=\"contained\"\n startIcon={<CloseIcon />}\n >\n {I18n.t(titleButtonClose || 'Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default CustomModal;\n","// File viewer in adapter-react does not support write\nimport { Buffer } from 'buffer';\nimport React, { type JSX } from 'react';\n\n// File viewer in adapter-react does not use ace editor\nimport * as ace from 'ace-builds';\nimport 'ace-builds/src-noconflict/ext-modelist';\n\nimport { withWidth, FileViewerClass } from '@iobroker/adapter-react-v5';\n\nimport Editor from './Editor';\nimport type { FileViewerProps } from '@iobroker/adapter-react-v5';\n\nconst modelist = ace.require('ace/ext/modelist');\n\nclass FileEditorClass extends FileViewerClass {\n constructor(props: FileViewerProps) {\n super(props);\n\n Object.assign(this.state, {\n // File viewer in adapter-react does not support write\n editing: !!this.props.formatEditFile || false,\n });\n }\n\n static getEditFile(ext: string | null): 'json' | 'json5' | 'javascript' | 'html' | 'text' {\n switch (ext) {\n case 'json':\n return 'json';\n case 'json5':\n return 'json5';\n case 'js':\n return 'javascript';\n case 'html':\n return 'html';\n case 'txt':\n return 'html';\n default:\n // e.g. ace/mode/text\n return modelist.getModeForPath(`testFile.${ext}`).mode.split('/').pop();\n }\n }\n\n writeFile64 = (): void => {\n // File viewer in adapter-react does not support write\n const parts = this.props.href.split('/');\n const data = this.state.editingValue;\n parts.splice(0, 2);\n const adapter = parts[0];\n const name = parts.splice(1).join('/');\n this.props.socket\n .writeFile64(adapter, name, Buffer.from(data).toString('base64'))\n .then(() => this.props.onClose())\n .catch(e => window.alert(`Cannot write file: ${e}`));\n };\n\n getEditorOrViewer(): JSX.Element {\n // File viewer in adapter-react does not support write\n return (\n <Editor\n mode={FileEditorClass.getEditFile(this.props.formatEditFile)}\n themeType={this.props.themeType}\n value={this.state.editingValue || this.state.code || this.state.text}\n onChange={\n this.state.editing\n ? newValue => this.setState({ editingValue: newValue, changed: true })\n : undefined\n }\n />\n );\n }\n\n onSave(): void {\n this.writeFile64();\n }\n}\n\nexport const FileEditor = withWidth()(FileEditorClass);\n","import React, { useEffect, useState, type JSX } from 'react';\nimport { Checkbox, LinearProgress, Switch } from '@mui/material';\n\nimport {\n I18n,\n SelectWithIcon,\n type AdminConnection,\n type ThemeType,\n type Translate,\n type IobTheme,\n type FolderOrFileItem,\n type Folders,\n type MetaACL,\n type MetaObject,\n} from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '../helpers/AdminUtils';\nimport CustomModal from '../components/CustomModal';\n\nconst readWriteArray: Record<string, { name: 'read' | 'write'; valueNum: number; title: string }[]>[] = [\n {\n Owner: [\n { name: 'read', valueNum: 0x400, title: 'read owner' },\n { name: 'write', valueNum: 0x200, title: 'write owner' },\n ],\n },\n {\n Group: [\n { name: 'read', valueNum: 0x40, title: 'read group' },\n { name: 'write', valueNum: 0x20, title: 'write group' },\n ],\n },\n {\n Everyone: [\n { name: 'read', valueNum: 0x4, title: 'read everyone' },\n { name: 'write', valueNum: 0x2, title: 'write everyone' },\n ],\n },\n];\n\nconst newValueAccessControl = (value: number, newValue: number, mask: number): number => {\n value |= newValue & mask;\n\n value &= newValue | (~mask & 0xffff);\n return value;\n};\n\ninterface ObjectRightsProps {\n value: number;\n setValue: (value: number) => void;\n t: Translate;\n differentValues: number[];\n applyToChildren: boolean;\n mask: number;\n setMask: (mask: number) => void;\n disabled: boolean;\n}\n\nconst ObjectRights: React.FC<ObjectRightsProps> = ({\n value,\n setValue,\n t,\n differentValues,\n applyToChildren,\n mask,\n setMask,\n disabled,\n}) => {\n useEffect(() => {\n if (applyToChildren) {\n let _checkDifferent = 0;\n for (let e = 0; e < differentValues.length; e++) {\n _checkDifferent |= value ^ differentValues[e];\n }\n setMask(_checkDifferent);\n } else {\n setMask(0);\n }\n }, [differentValues, applyToChildren, setMask, value]);\n\n let newSelected = value;\n\n return (\n <div\n style={{\n display: 'flex',\n width: 'fit-content',\n margin: 20,\n border: '1px solid',\n borderLeft: 0,\n }}\n >\n {readWriteArray.map(el => {\n const name = Object.keys(el)[0];\n\n return (\n <div\n style={{\n width: 150,\n height: 150,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n borderLeft: '1px solid',\n }}\n key={name}\n >\n <div\n style={{\n height: 50,\n display: 'flex',\n alignItems: 'center',\n fontSize: 18,\n borderBottom: '1px solid silver',\n width: '100%',\n justifyContent: 'center',\n }}\n >\n {t(name)}\n </div>\n <div\n style={{\n display: 'flex',\n width: '100%',\n }}\n >\n {el[name].map((obj, idx) => {\n let bool = false;\n\n const masked = mask & obj.valueNum;\n\n if (newSelected - obj.valueNum >= 0) {\n newSelected -= obj.valueNum;\n bool = true;\n }\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n alignItems: 'center',\n borderRight: idx === 0 ? '1px solid' : 0,\n }}\n key={obj.valueNum}\n >\n <div\n style={{\n height: 50,\n borderBottom: '1px solid',\n width: '100%',\n justifyContent: 'center',\n display: 'flex',\n alignItems: 'center',\n color: 'silver',\n }}\n >\n {t(obj.name)}\n </div>\n <div style={{ height: 50, display: 'flex' }}>\n <Checkbox\n disabled={disabled}\n checked={bool}\n color={masked ? 'primary' : 'secondary'}\n indeterminate={!!masked}\n style={masked ? { opacity: 0.5 } : undefined}\n onChange={e => {\n if (masked) {\n mask &= ~obj.valueNum & 0xffff;\n setMask(mask);\n }\n let newValue = value;\n if (!e.target.checked) {\n newValue &= ~obj.valueNum & 0xffff;\n } else {\n newValue |= obj.valueNum;\n }\n setValue(newValue);\n }}\n />\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nasync function loadFolders(folderId: string, folders: Folders, socket: AdminConnection): Promise<void> {\n let files = folders[folderId];\n if (!files) {\n const parts = folderId.split('/');\n const level = parts.length;\n const adapter = parts.shift() || null;\n const relPath = parts.join('/');\n const dirFiles = await socket.readDir(adapter, relPath);\n folders[folderId] = [];\n for (let f = 0; f < dirFiles.length; f++) {\n const file = dirFiles[f];\n const item: FolderOrFileItem = {\n id: `${folderId}/${file.file}`,\n ext: AdminUtils.getFileExtension(file.file),\n folder: file.isDir,\n name: file.file,\n size: file.stats && file.stats.size,\n modified: file.modifiedAt,\n acl: file.acl,\n level,\n };\n folders[folderId].push(item);\n }\n files = folders[folderId];\n }\n\n for (let f = 0; f < files.length; f++) {\n const item = files[f];\n if (item.folder) {\n await loadFolders(item.id, folders, socket);\n }\n }\n}\n\nfunction flatList(folders: Folders): Record<string, FolderOrFileItem> {\n const list: Record<string, FolderOrFileItem> = {};\n\n Object.keys(folders).forEach(key => {\n list[key] = {\n folder: true,\n id: key, // unused\n level: 0, // unused\n name: key, // unused\n };\n folders[key].forEach(item => {\n list[item.id] = item;\n });\n });\n\n return list;\n}\n\nasync function loadPath(\n socket: AdminConnection,\n folders: Folders,\n path: string | string[],\n adapter: string = '',\n part: string = '',\n level: number = 0,\n): Promise<void> {\n if (typeof path === 'string') {\n path = path.split('/');\n level = 0;\n adapter = path.shift() || '';\n part = '';\n }\n\n if (path.length >= level) {\n return;\n }\n\n if (folders[adapter + part]) {\n if (path.length - 1 === level) {\n // try to find a file\n const aa = `${adapter + part}/${path[level]}`;\n const ff = folders[adapter + part].find(item => item.id === aa);\n if (ff && ff.folder) {\n // load all\n await loadFolders(adapter + part, folders, socket);\n }\n return;\n }\n part += `/${path[level]}`;\n\n await loadPath(socket, folders, path, adapter, part, level + 1);\n } else {\n // load path\n const files = await socket.readDir(adapter || null, part);\n folders[adapter + part] = [];\n files.forEach(file => {\n const item = {\n id: `${part}/${file.file}`,\n ext: AdminUtils.getFileExtension(file.file),\n folder: file.isDir,\n name: file.file,\n size: file.stats && file.stats.size,\n modified: file.modifiedAt,\n acl: file.acl,\n level,\n };\n\n folders[adapter + part].push(item);\n });\n\n await loadPath(socket, folders, path, adapter, part, level + 1);\n }\n}\n\nconst DIFFERENT = 'different';\n\ninterface FileEditOfAccessControlProps {\n onClose: () => void;\n onApply: () => void;\n selected: string;\n applyChangesToObject: (obj: MetaObject) => Promise<void>;\n applyChangesToFile: (adapter: string, filePath: string, acl?: Partial<ioBroker.FileACL>) => Promise<void>;\n objects: Record<string, ioBroker.Object>;\n t: Translate;\n themeType: ThemeType;\n theme: IobTheme;\n folders: Folders;\n socket: AdminConnection;\n}\n\nconst FileEditOfAccessControl: React.FC<FileEditOfAccessControlProps> = ({\n onClose,\n onApply,\n selected,\n applyChangesToObject,\n applyChangesToFile,\n objects,\n t,\n themeType,\n folders,\n socket,\n theme,\n}: FileEditOfAccessControlProps): JSX.Element => {\n const select = selected.substring(0, selected.lastIndexOf('/')) || selected;\n const object: FolderOrFileItem =\n (selected.split('/').length === 1\n ? folders['/'].find(({ id }) => id === selected)\n : folders[select].find(({ id }) => id === selected)) || ({} as FolderOrFileItem);\n const [stateOwnerUser, setStateOwnerUser] = useState<string | null>(null);\n const [stateOwnerGroup, setStateOwnerGroup] = useState<string | null>(null);\n const [users, setUsers] = useState<ioBroker.UserObject[]>([]);\n const [groups, setGroups] = useState<ioBroker.GroupObject[]>([]);\n const [applyToChildren, setApplyToChildren] = useState(false);\n const [childrenCount, setChildrenCount] = useState(0);\n const [valueFileAccessControl, setValueFileAccessControl] = useState<number | null>(null);\n const [differentOwner, setDifferentOwner] = useState(false);\n const [differentGroup, setDifferentGroup] = useState(false);\n const [differentObject, setDifferentObject] = useState<number[]>([]);\n const [maskObject, setMaskObject] = useState(0);\n const [ids, setIds] = useState<(MetaObject | FolderOrFileItem)[]>([]);\n const [disabledButton, setDisabledButton] = useState(true);\n const [progress, setProgress] = useState(false);\n\n const lang = I18n.getLanguage();\n\n useEffect(() => {\n const _differentObject: number[] = [];\n\n const id = object.id;\n\n let _differentOwner = false;\n let _differentGroup = false;\n let _stateOwnerUser: string | null = null;\n let _stateOwnerGroup: string | null = null;\n let _valueFileAccessControl: number = null;\n const _ids: (MetaObject | FolderOrFileItem)[] = [];\n let count = 0;\n\n void loadPath(socket, folders, id).then(() => {\n const list = flatList(folders);\n\n const idWithSlash = `${id}/`;\n\n Object.keys(list).forEach(key => {\n if (key === '/') {\n return;\n }\n\n if (key === id || key.startsWith(idWithSlash)) {\n if (!key.includes('/') && objects[key]) {\n // it is an object\n const objFolder = objects[key] as MetaObject;\n count++;\n _ids.push(objFolder);\n\n if (_valueFileAccessControl === null && objFolder.acl?.file !== undefined) {\n _valueFileAccessControl = objFolder.acl.file;\n }\n if (_stateOwnerUser === null && objFolder.acl?.owner !== undefined) {\n _stateOwnerUser = objFolder.acl.owner;\n }\n if (_stateOwnerGroup === null && objFolder.acl?.ownerGroup !== undefined) {\n _stateOwnerGroup = objFolder.acl.ownerGroup;\n }\n\n if (\n !differentOwner &&\n _stateOwnerUser !== objFolder.acl?.owner &&\n objFolder.acl?.owner !== undefined\n ) {\n _differentOwner = true;\n }\n if (\n !differentGroup &&\n _stateOwnerGroup !== objFolder.acl?.ownerGroup &&\n objFolder.acl?.ownerGroup !== undefined\n ) {\n _differentGroup = true;\n }\n if (\n objFolder.acl?.file !== undefined &&\n _valueFileAccessControl !== objFolder.acl?.file &&\n !_differentObject.includes(objFolder.acl.file)\n ) {\n _differentObject.push(objFolder.acl.file);\n }\n } else if (!list[key].folder) {\n count++;\n const keyFolder = list[key];\n _ids.push(keyFolder);\n if (\n _valueFileAccessControl === null &&\n (keyFolder.acl as ioBroker.EvaluatedFileACL).permissions !== undefined\n ) {\n _valueFileAccessControl = (keyFolder.acl as ioBroker.EvaluatedFileACL).permissions;\n }\n if (_stateOwnerUser === null && keyFolder.acl.owner !== undefined) {\n _stateOwnerUser = keyFolder.acl.owner;\n }\n if (_stateOwnerGroup === null && keyFolder.acl.ownerGroup !== undefined) {\n _stateOwnerGroup = keyFolder.acl.ownerGroup;\n }\n\n if (\n !differentOwner &&\n _stateOwnerUser !== keyFolder.acl.owner &&\n keyFolder.acl.owner !== undefined\n ) {\n _differentOwner = true;\n }\n if (\n !differentGroup &&\n _stateOwnerGroup !== keyFolder.acl.ownerGroup &&\n keyFolder.acl.ownerGroup !== undefined\n ) {\n _differentGroup = true;\n }\n if (\n (keyFolder.acl as ioBroker.EvaluatedFileACL).permissions !== undefined &&\n _valueFileAccessControl !== (keyFolder.acl as ioBroker.EvaluatedFileACL).permissions &&\n !_differentObject.includes((keyFolder.acl as ioBroker.EvaluatedFileACL).permissions)\n ) {\n _differentObject.push((keyFolder.acl as ioBroker.EvaluatedFileACL).permissions);\n }\n }\n }\n });\n\n const _users: ioBroker.UserObject[] = [];\n const _groups: ioBroker.GroupObject[] = [];\n // Get users and groups\n Object.keys(objects).forEach(_id => {\n const obj = objects[_id];\n if (_id.startsWith('system.group.') && obj?.type === 'group') {\n _groups.push(obj as ioBroker.GroupObject);\n } else if (_id.startsWith('system.user.') && obj?.type === 'user') {\n _users.push(obj as ioBroker.UserObject);\n }\n });\n\n const defaultAcl = objects['system.config'].common.defaultNewAcl;\n\n _stateOwnerUser = _stateOwnerUser || defaultAcl.owner;\n _stateOwnerGroup = _stateOwnerGroup || defaultAcl.ownerGroup;\n _valueFileAccessControl = _valueFileAccessControl || defaultAcl.file;\n setValueFileAccessControl(_valueFileAccessControl);\n\n setStateOwnerUser(_stateOwnerUser);\n setStateOwnerGroup(_stateOwnerGroup);\n\n setDifferentOwner(_differentOwner);\n setDifferentGroup(_differentGroup);\n\n setUsers(_users);\n setGroups(_groups);\n\n if (object?.folder) {\n setApplyToChildren(true);\n }\n setChildrenCount(count);\n\n setDifferentObject(_differentObject);\n\n setIds(_ids);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [objects, selected]);\n\n useEffect(() => {\n if (applyToChildren) {\n if (differentOwner && stateOwnerUser !== DIFFERENT) {\n setStateOwnerUser(DIFFERENT);\n }\n\n if (differentGroup && stateOwnerGroup !== DIFFERENT) {\n setStateOwnerGroup(DIFFERENT);\n }\n } else {\n if (stateOwnerUser && stateOwnerUser === DIFFERENT) {\n setStateOwnerUser(objects[selected]?.acl?.owner || null);\n }\n if (stateOwnerGroup && stateOwnerGroup === DIFFERENT) {\n setStateOwnerGroup(objects[selected]?.acl?.ownerGroup || null);\n }\n }\n console.log(`stateOwnerUser ${stateOwnerUser}`);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [applyToChildren, stateOwnerUser, stateOwnerGroup, differentOwner, differentGroup]);\n\n if (!ids.length) {\n return <LinearProgress />;\n }\n return (\n <CustomModal\n theme={theme}\n titleButtonApply=\"apply\"\n overflowHidden\n disableApply={disabledButton}\n progress={progress}\n onClose={onClose}\n onApply={() => {\n setProgress(true);\n setTimeout(async () => {\n const defaultAclFile = objects['system.config'].common?.defaultNewAcl?.file || 0x664;\n\n if (!applyToChildren) {\n const parts = object.id.split('/');\n const adapter = parts.shift();\n const path = parts.join('/');\n const newAcl: Partial<ioBroker.FileACL> = {};\n let changed = false;\n if (!object.folder) {\n if ((object.acl as ioBroker.EvaluatedFileACL)?.permissions !== valueFileAccessControl) {\n newAcl.permissions = valueFileAccessControl;\n changed = true;\n }\n if (object.acl?.owner !== stateOwnerUser) {\n newAcl.owner = stateOwnerUser;\n changed = true;\n }\n if (object.acl?.ownerGroup !== stateOwnerGroup) {\n newAcl.ownerGroup = stateOwnerGroup;\n changed = true;\n }\n if (changed) {\n await applyChangesToFile(adapter, path, newAcl);\n }\n } else if (!parts.length && objects[object.id]) {\n // setObject(acl)\n const obj = objects[object.id] as MetaObject;\n if (obj.acl?.file !== valueFileAccessControl) {\n obj.acl = obj.acl || ({} as MetaACL);\n obj.acl.file = valueFileAccessControl;\n changed = true;\n }\n if (obj.acl?.owner !== stateOwnerUser) {\n obj.acl = obj.acl || ({} as MetaACL);\n obj.acl.owner = stateOwnerUser;\n changed = true;\n }\n if (obj.acl?.ownerGroup !== stateOwnerGroup) {\n obj.acl = obj.acl || ({} as MetaACL);\n obj.acl.ownerGroup = stateOwnerGroup;\n changed = true;\n }\n if (changed) {\n await applyChangesToObject(obj);\n }\n }\n } else {\n const _maskObject = ~maskObject & 0xffff;\n for (let i = 0; i < ids.length; i++) {\n const item = ids[i];\n let changed = false;\n const itemAsObject = item as MetaObject;\n const itemAsItem = item as FolderOrFileItem;\n\n if (itemAsObject._id) {\n // it is an object\n const permissions = newValueAccessControl(\n itemAsObject.acl?.file || defaultAclFile,\n valueFileAccessControl,\n _maskObject,\n );\n if (permissions !== itemAsObject.acl?.file) {\n itemAsObject.acl = itemAsObject.acl || ({} as MetaACL);\n itemAsObject.acl.file = permissions;\n changed = true;\n }\n if (stateOwnerUser !== DIFFERENT && stateOwnerUser !== itemAsObject.acl?.owner) {\n itemAsObject.acl = itemAsObject.acl || ({} as MetaACL);\n itemAsObject.acl.owner = stateOwnerUser;\n changed = true;\n }\n if (stateOwnerGroup !== DIFFERENT && stateOwnerGroup !== itemAsObject.acl?.ownerGroup) {\n itemAsObject.acl = itemAsObject.acl || ({} as MetaACL);\n itemAsObject.acl.ownerGroup = stateOwnerGroup;\n changed = true;\n }\n\n try {\n if (changed) {\n await applyChangesToObject(itemAsObject);\n }\n } catch (error) {\n console.error(error);\n }\n } else if (itemAsItem && !itemAsItem.folder) {\n const newAcl: Partial<ioBroker.FileACL> = {};\n const permissions = newValueAccessControl(\n (itemAsItem.acl as ioBroker.EvaluatedFileACL)?.permissions || defaultAclFile,\n valueFileAccessControl,\n _maskObject,\n );\n if (permissions !== (itemAsItem.acl as ioBroker.EvaluatedFileACL)?.permissions) {\n newAcl.permissions = permissions;\n changed = true;\n }\n if (stateOwnerUser !== DIFFERENT && stateOwnerUser !== itemAsItem.acl?.owner) {\n newAcl.owner = stateOwnerUser;\n changed = true;\n }\n if (stateOwnerGroup !== DIFFERENT && stateOwnerGroup !== itemAsItem.acl?.ownerGroup) {\n newAcl.ownerGroup = stateOwnerGroup;\n changed = true;\n }\n if (changed) {\n const parts = itemAsItem.id.split('/');\n const adapter = parts.shift();\n const path = parts.join('/');\n try {\n await applyChangesToFile(adapter, path, newAcl);\n } catch (error) {\n console.error(error);\n }\n }\n }\n }\n }\n\n setProgress(false);\n onApply();\n }, 200);\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <div\n style={{\n margin: 10,\n fontSize: 20,\n }}\n >\n {t('Access control list: %s', selected)}\n </div>\n\n <div style={{ display: 'flex' }}>\n <SelectWithIcon\n fullWidth\n style={{ marginRight: 10 }}\n label={t('Owner user')}\n lang={lang}\n list={users as ioBroker.Object[]}\n t={t}\n disabled={progress}\n value={stateOwnerUser || undefined}\n themeType={themeType}\n different={differentOwner ? DIFFERENT : false}\n onChange={val => {\n setDifferentOwner(false);\n setStateOwnerUser(val);\n setDisabledButton(false);\n }}\n />\n <SelectWithIcon\n fullWidth\n label={t('Owner group')}\n lang={lang}\n list={groups as ioBroker.Object[]}\n t={t}\n disabled={progress}\n value={stateOwnerGroup || undefined}\n themeType={themeType}\n different={differentGroup ? DIFFERENT : false}\n onChange={val => {\n setDifferentGroup(false);\n setStateOwnerGroup(val);\n setDisabledButton(false);\n }}\n />\n </div>\n\n <div\n style={{\n display: 'flex',\n margin: 10,\n alignItems: 'center',\n fontSize: 10,\n marginLeft: 0,\n color: 'silver',\n }}\n >\n <div style={!object.folder || !applyToChildren ? { color: 'green' } : undefined}>\n {t('to apply one item')}\n </div>\n <Switch\n disabled={ids.length === 1 || progress}\n checked={(!objects[object.id] && !!object.folder) || applyToChildren}\n onChange={e => {\n setApplyToChildren(e.target.checked);\n setDisabledButton(false);\n }}\n color=\"primary\"\n />\n <div style={object.folder || applyToChildren ? { color: 'green' } : undefined}>\n {t('to apply with children')}{' '}\n {object.folder || childrenCount > 1 ? `(${childrenCount} ${t('object(s)')})` : ''}\n </div>\n </div>\n\n {progress && <LinearProgress />}\n\n <div style={{ overflowY: 'auto' }}>\n <div>\n <h2>{t('File rights')}</h2>\n <ObjectRights\n disabled={progress}\n mask={maskObject}\n setMask={setMaskObject}\n applyToChildren={applyToChildren}\n differentValues={differentObject}\n t={t}\n setValue={e => {\n setValueFileAccessControl(e);\n setDisabledButton(false);\n }}\n value={valueFileAccessControl}\n />\n </div>\n </div>\n </div>\n </CustomModal>\n );\n};\n\nexport default FileEditOfAccessControl;\n","import React, { Component, type JSX } from 'react';\n\nimport { LinearProgress } from '@mui/material';\n\nimport {\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type Translate,\n TabContainer,\n TabContent,\n} from '@iobroker/adapter-react-v5';\n\nimport { FileBrowser, type FileBrowserClass, type MetaObject } from '@iobroker/adapter-react-v5';\n\nimport { FileEditor } from '../components/FileEditor';\nimport FileEditOfAccessControl from '../dialogs/FileEditOfAccessControl';\n\ninterface FilesProps {\n t: Translate;\n lang: ioBroker.Languages;\n socket: AdminConnection;\n ready: boolean;\n expertMode: boolean;\n themeType: ThemeType;\n theme: IobTheme;\n}\n\nclass Files extends Component<FilesProps> {\n private readonly t: Translate;\n\n private readonly wordCache: Record<string, string>;\n\n private objects: Record<string, ioBroker.Object>;\n\n constructor(props: FilesProps) {\n super(props);\n this.t = this.translate;\n this.wordCache = {};\n this.objects = {};\n }\n\n componentDidMount(): void {\n void this.props.socket.getObjects(true, true).then(objects => (this.objects = objects));\n }\n\n translate = (word: string, arg1?: any, arg2?: any): string => {\n if (arg1 !== undefined) {\n return this.props.t(word, arg1, arg2);\n }\n\n if (!this.wordCache[word]) {\n this.wordCache[word] = this.props.t(word);\n }\n\n return this.wordCache[word];\n };\n\n renderAclDialog(context: FileBrowserClass): JSX.Element {\n return (\n <FileEditOfAccessControl\n theme={this.props.theme}\n themeType={this.props.themeType}\n applyChangesToObject={async (fileObj: MetaObject) => {\n // it is setObject\n const oldObj = (await this.props.socket.getObject(fileObj._id)) as MetaObject;\n oldObj.acl = fileObj.acl;\n await this.props.socket.setObject(oldObj._id, oldObj);\n const result: MetaObject = oldObj;\n\n if (result?.acl) {\n context.updateItemsAcl([\n {\n id: result._id,\n acl: result.acl,\n level: 0, // not used\n name: result._id, // not used\n folder: false, // not used\n },\n ]);\n }\n }}\n applyChangesToFile={async (adapter: string, file: string, data: Partial<ioBroker.FileACL>) => {\n let result: ioBroker.ChownFileResult[] | undefined;\n if ((data.owner || data.ownerGroup) && data.permissions) {\n await this.props.socket.chownFile(adapter, file, {\n owner: data.owner,\n ownerGroup: data.ownerGroup,\n });\n result = await this.props.socket.chmodFile(adapter, file, { mode: data.permissions });\n } else if (data.permissions) {\n result = await this.props.socket.chmodFile(adapter, file, { mode: data.permissions });\n } else if (data.owner || data.ownerGroup) {\n result = await this.props.socket.chownFile(adapter, file, {\n owner: data.owner,\n ownerGroup: data.ownerGroup,\n });\n }\n\n if (Array.isArray(result)) {\n for (let i = 0; i < result.length; i++) {\n const item = result[i];\n if (item && item.file && item.acl) {\n context.updateItemsAcl([\n {\n id: `${adapter}/${item.path ? `${item.path}/` : ''}${item.file}`,\n acl: item.acl as ioBroker.EvaluatedFileACL,\n level: 0, // not used\n name: '', // not used\n folder: false, // not used\n },\n ]);\n }\n }\n }\n // deprecated\n // } else if (result?.entries) {\n // for (let i = 0; i < result.entries.length; i++) {\n // const item = result.entries[i];\n // if (item && item.file && item.acl) {\n // context.updateItemsAcl([{ id: `${adapter}/${item.path ? `${item.path}/` : ''}${item.file}`, acl: item.acl }]);\n // }\n // }\n // }\n }}\n selected={context.state.selected}\n folders={context.state.folders}\n objects={this.objects}\n socket={this.props.socket}\n t={this.t}\n onClose={() => context.setState({ modalEditOfAccess: false })}\n onApply={() => context.setState({ modalEditOfAccess: false })}\n />\n );\n }\n\n render(): JSX.Element {\n if (!this.props.ready) {\n return <LinearProgress />;\n }\n\n return (\n <TabContainer>\n <TabContent overflow=\"auto\">\n <FileBrowser\n showViewTypeButton\n ready={this.props.ready}\n socket={this.props.socket}\n themeType={this.props.themeType}\n theme={this.props.theme}\n lang={this.props.lang}\n t={this.props.t}\n showToolbar\n allowUpload\n allowView\n allowDownload\n allowCreateFolder\n allowDelete\n expertMode={this.props.expertMode}\n modalEditOfAccessControl={(context: FileBrowserClass) => this.renderAclDialog(context)}\n FileViewer={FileEditor}\n />\n </TabContent>\n </TabContainer>\n );\n }\n}\n\nexport default Files;\n"],"names":["styles","modalDialog","minWidth","maxWidth","overflowHidden","display","overflow","titleIcon","marginRight","content","fontSize","languageButton","position","right","top","languageButtonActive","theme","color","palette","primary","main","_ref","toggleTranslation","noTranslation","title","fullWidth","help","progress","icon","disableApplyIfNotChanged","applyButton","onClose","children","titleButtonApply","titleButtonClose","onApply","textInput","defaultValue","disableApply","value","setValue","useState","useEffect","Icon","Utils","getStyle","_jsxs","Dialog","open","disableEscapeKeyDown","sx","DialogTitle","_jsx","style","I18n","getLanguage","IconButton","size","_objectSpread","undefined","onClick","t","LanguageIcon","DialogContent","paddingTop","TextField","autoComplete","autoFocus","variant","multiline","onChange","e","target","slotProps","input","endAdornment","InputAdornment","CloseIcon","DialogActions","Button","startIcon","CheckIcon","disabled","modelist","ace","require","FileEditorClass","FileViewerClass","constructor","props","super","writeFile64","parts","this","href","split","data","state","editingValue","splice","adapter","name","join","socket","Buffer","from","toString","then","catch","window","alert","concat","Object","assign","editing","formatEditFile","getEditFile","ext","getModeForPath","mode","pop","getEditorOrViewer","Editor","themeType","code","text","newValue","setState","changed","onSave","FileEditor","withWidth","readWriteArray","Owner","valueNum","Group","Everyone","newValueAccessControl","mask","ObjectRights","differentValues","applyToChildren","setMask","_checkDifferent","length","newSelected","width","margin","border","borderLeft","map","el","keys","height","flexDirection","alignItems","borderBottom","justifyContent","obj","idx","bool","masked","flex","borderRight","Checkbox","checked","indeterminate","opacity","async","loadFolders","folderId","folders","files","level","shift","relPath","dirFiles","readDir","f","file","item","id","AdminUtils","getFileExtension","folder","isDir","stats","modified","modifiedAt","acl","push","loadPath","path","arguments","part","aa","ff","find","forEach","DIFFERENT","_ref2","selected","applyChangesToObject","applyChangesToFile","objects","select","substring","lastIndexOf","object","_ref3","_ref4","stateOwnerUser","setStateOwnerUser","stateOwnerGroup","setStateOwnerGroup","users","setUsers","groups","setGroups","setApplyToChildren","childrenCount","setChildrenCount","valueFileAccessControl","setValueFileAccessControl","differentOwner","setDifferentOwner","differentGroup","setDifferentGroup","differentObject","setDifferentObject","maskObject","setMaskObject","ids","setIds","disabledButton","setDisabledButton","setProgress","lang","_differentObject","_differentOwner","_differentGroup","_stateOwnerUser","_stateOwnerGroup","_valueFileAccessControl","_ids","count","list","key","flatList","idWithSlash","startsWith","includes","_objFolder$acl","_objFolder$acl2","_objFolder$acl3","_objFolder$acl4","_objFolder$acl5","_objFolder$acl6","_objFolder$acl7","_objFolder$acl8","_objFolder$acl9","objFolder","owner","ownerGroup","keyFolder","permissions","_users","_groups","_id","type","defaultAcl","common","defaultNewAcl","_objects$selected","_objects$selected$acl","_objects$selected2","_objects$selected2$ac","console","log","CustomModal","setTimeout","_objects$systemConfi","_objects$systemConfi$","defaultAclFile","_maskObject","i","itemAsObject","itemAsItem","_itemAsObject$acl","_itemAsObject$acl2","_itemAsObject$acl3","_itemAsObject$acl4","error","_itemAsItem$acl","_itemAsItem$acl2","_itemAsItem$acl3","_itemAsItem$acl4","newAcl","_object$acl","_object$acl2","_object$acl3","_obj$acl","_obj$acl2","_obj$acl3","SelectWithIcon","label","different","val","marginLeft","Switch","LinearProgress","overflowY","Files","Component","wordCache","translate","word","arg1","arg2","componentDidMount","getObjects","renderAclDialog","context","FileEditOfAccessControl","oldObj","getObject","fileObj","setObject","result","updateItemsAcl","chownFile","chmodFile","Array","isArray","modalEditOfAccess","render","ready","TabContainer","TabContent","FileBrowser","showViewTypeButton","showToolbar","allowUpload","allowView","allowDownload","allowCreateFolder","allowDelete","expertMode","modalEditOfAccessControl","FileViewer"],"sourceRoot":""}