mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 13:15:43 +00:00 
			
		
		
		
	Various SAST fixes (#7644)
* cleanup auth * clean Unexpected empty object pattern * clenaup empty object patterns * fix identical sub-expressions * fix missing title on iframe * Do not pass children as props * update node assigment * fix typing * fix variables that shadow builtins * revert StylishText change
This commit is contained in:
		| @@ -1,5 +1,7 @@ | |||||||
| """API for the plugin app.""" | """API for the plugin app.""" | ||||||
|  |  | ||||||
|  | from typing import Optional | ||||||
|  |  | ||||||
| from django.core.exceptions import ValidationError | from django.core.exceptions import ValidationError | ||||||
| from django.urls import include, path, re_path | from django.urls import include, path, re_path | ||||||
| from django.utils.translation import gettext_lazy as _ | from django.utils.translation import gettext_lazy as _ | ||||||
| @@ -266,7 +268,9 @@ class PluginSettingList(ListAPI): | |||||||
|     filterset_fields = ['plugin__active', 'plugin__key'] |     filterset_fields = ['plugin__active', 'plugin__key'] | ||||||
|  |  | ||||||
|  |  | ||||||
| def check_plugin(plugin_slug: str, plugin_pk: int) -> InvenTreePlugin: | def check_plugin( | ||||||
|  |     plugin_slug: Optional[str], plugin_pk: Optional[int] | ||||||
|  | ) -> InvenTreePlugin: | ||||||
|     """Check that a plugin for the provided slug exists and get the config. |     """Check that a plugin for the provided slug exists and get the config. | ||||||
|  |  | ||||||
|     Args: |     Args: | ||||||
| @@ -286,16 +290,16 @@ def check_plugin(plugin_slug: str, plugin_pk: int) -> InvenTreePlugin: | |||||||
|         raise NotFound(detail='Plugin not specified') |         raise NotFound(detail='Plugin not specified') | ||||||
|  |  | ||||||
|     # Define filter |     # Define filter | ||||||
|     filter = {} |     filters = {} | ||||||
|     if plugin_slug: |     if plugin_slug: | ||||||
|         filter['key'] = plugin_slug |         filters['key'] = plugin_slug | ||||||
|     elif plugin_pk: |     elif plugin_pk: | ||||||
|         filter['pk'] = plugin_pk |         filters['pk'] = plugin_pk | ||||||
|     ref = plugin_slug or plugin_pk |     ref = plugin_slug or plugin_pk | ||||||
|  |  | ||||||
|     # Check that the 'plugin' specified is valid |     # Check that the 'plugin' specified is valid | ||||||
|     try: |     try: | ||||||
|         plugin_cgf = PluginConfig.objects.filter(**filter).first() |         plugin_cgf = PluginConfig.objects.filter(**filters).first() | ||||||
|     except PluginConfig.DoesNotExist: |     except PluginConfig.DoesNotExist: | ||||||
|         raise NotFound(detail=f"Plugin '{ref}' not installed") |         raise NotFound(detail=f"Plugin '{ref}' not installed") | ||||||
|  |  | ||||||
|   | |||||||
| @@ -39,7 +39,7 @@ def qrcode(data, **kwargs): | |||||||
|     fill_color = kwargs.pop('fill_color', 'black') |     fill_color = kwargs.pop('fill_color', 'black') | ||||||
|     back_color = kwargs.pop('back_color', 'white') |     back_color = kwargs.pop('back_color', 'white') | ||||||
|  |  | ||||||
|     format = kwargs.pop('format', 'PNG') |     img_format = kwargs.pop('format', 'PNG') | ||||||
|  |  | ||||||
|     params.update(**kwargs) |     params.update(**kwargs) | ||||||
|  |  | ||||||
| @@ -51,7 +51,7 @@ def qrcode(data, **kwargs): | |||||||
|     qri = qr.make_image(fill_color=fill_color, back_color=back_color) |     qri = qr.make_image(fill_color=fill_color, back_color=back_color) | ||||||
|  |  | ||||||
|     # Render to byte-encoded image |     # Render to byte-encoded image | ||||||
|     return image_data(qri, fmt=format) |     return image_data(qri, fmt=img_format) | ||||||
|  |  | ||||||
|  |  | ||||||
| @register.simple_tag() | @register.simple_tag() | ||||||
| @@ -59,7 +59,7 @@ def barcode(data, barcode_class='code128', **kwargs): | |||||||
|     """Render a barcode.""" |     """Render a barcode.""" | ||||||
|     constructor = python_barcode.get_barcode_class(barcode_class) |     constructor = python_barcode.get_barcode_class(barcode_class) | ||||||
|  |  | ||||||
|     format = kwargs.pop('format', 'PNG') |     img_format = kwargs.pop('format', 'PNG') | ||||||
|  |  | ||||||
|     data = str(data).zfill(constructor.digits) |     data = str(data).zfill(constructor.digits) | ||||||
|  |  | ||||||
| @@ -70,4 +70,4 @@ def barcode(data, barcode_class='code128', **kwargs): | |||||||
|     image = barcode_image.render(writer_options=kwargs) |     image = barcode_image.render(writer_options=kwargs) | ||||||
|  |  | ||||||
|     # Render to byte-encoded image |     # Render to byte-encoded image | ||||||
|     return image_data(image, fmt=format) |     return image_data(image, fmt=img_format) | ||||||
|   | |||||||
| @@ -173,7 +173,7 @@ function generateTreeStructure(data, options) { | |||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         if (options.processNode) { |         if (options.processNode) { | ||||||
|             node = options.processNode(node); |             data[data.indexOf(node)] = options.processNode(node); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -188,7 +188,7 @@ function generateTreeStructure(data, options) { | |||||||
|             if (node.state.expanded) { |             if (node.state.expanded) { | ||||||
|                 while (node.parent != null) { |                 while (node.parent != null) { | ||||||
|                     nodes[node.parent].state.expanded = true; |                     nodes[node.parent].state.expanded = true; | ||||||
|                     node = nodes[node.parent]; |                     data[data.indexOf(node)] = nodes[node.parent]; | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -81,7 +81,9 @@ export const PdfPreviewComponent: PreviewAreaComponent = forwardRef( | |||||||
|             <Trans>Preview not available, click "Reload Preview".</Trans> |             <Trans>Preview not available, click "Reload Preview".</Trans> | ||||||
|           </div> |           </div> | ||||||
|         )} |         )} | ||||||
|         {pdfUrl && <iframe src={pdfUrl} width="100%" height="100%" />} |         {pdfUrl && ( | ||||||
|  |           <iframe src={pdfUrl} width="100%" height="100%" title="PDF Preview" /> | ||||||
|  |         )} | ||||||
|       </> |       </> | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -117,7 +117,7 @@ export function usePartFields({ | |||||||
| /** | /** | ||||||
|  * Construct a set of fields for creating / editing a PartCategory instance |  * Construct a set of fields for creating / editing a PartCategory instance | ||||||
|  */ |  */ | ||||||
| export function partCategoryFields({}: {}): ApiFormFieldSet { | export function partCategoryFields(): ApiFormFieldSet { | ||||||
|   let fields: ApiFormFieldSet = { |   let fields: ApiFormFieldSet = { | ||||||
|     parent: { |     parent: { | ||||||
|       description: t`Parent part category`, |       description: t`Parent part category`, | ||||||
|   | |||||||
| @@ -902,7 +902,7 @@ export function useDeleteStockItem(props: StockOperationProps) { | |||||||
|   }); |   }); | ||||||
| } | } | ||||||
|  |  | ||||||
| export function stockLocationFields({}: {}): ApiFormFieldSet { | export function stockLocationFields(): ApiFormFieldSet { | ||||||
|   let fields: ApiFormFieldSet = { |   let fields: ApiFormFieldSet = { | ||||||
|     parent: { |     parent: { | ||||||
|       description: t`Parent stock location`, |       description: t`Parent stock location`, | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ import { NavigateFunction } from 'react-router-dom'; | |||||||
|  |  | ||||||
| import { api, setApiDefaults } from '../App'; | import { api, setApiDefaults } from '../App'; | ||||||
| import { ApiEndpoints } from '../enums/ApiEndpoints'; | import { ApiEndpoints } from '../enums/ApiEndpoints'; | ||||||
| import { apiUrl, useServerApiState } from '../states/ApiState'; | import { apiUrl } from '../states/ApiState'; | ||||||
| import { useLocalState } from '../states/LocalState'; | import { useLocalState } from '../states/LocalState'; | ||||||
| import { useUserState } from '../states/UserState'; | import { useUserState } from '../states/UserState'; | ||||||
| import { fetchGlobalStates } from '../states/states'; | import { fetchGlobalStates } from '../states/states'; | ||||||
| @@ -47,8 +47,7 @@ function post(path: string, params: any, method = 'post') { | |||||||
|  */ |  */ | ||||||
| export const doBasicLogin = async (username: string, password: string) => { | export const doBasicLogin = async (username: string, password: string) => { | ||||||
|   const { host } = useLocalState.getState(); |   const { host } = useLocalState.getState(); | ||||||
|   const { clearUserState, setToken, fetchUserState, isLoggedIn } = |   const { clearUserState, setToken, fetchUserState } = useUserState.getState(); | ||||||
|     useUserState.getState(); |  | ||||||
|  |  | ||||||
|   if (username.length == 0 || password.length == 0) { |   if (username.length == 0 || password.length == 0) { | ||||||
|     return; |     return; | ||||||
| @@ -96,7 +95,7 @@ export const doBasicLogin = async (username: string, password: string) => { | |||||||
|  |  | ||||||
|   if (result) { |   if (result) { | ||||||
|     await fetchUserState(); |     await fetchUserState(); | ||||||
|     await fetchGlobalStates(); |     fetchGlobalStates(); | ||||||
|   } else { |   } else { | ||||||
|     clearUserState(); |     clearUserState(); | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ import { | |||||||
| } from '../../hooks/UseForm'; | } from '../../hooks/UseForm'; | ||||||
|  |  | ||||||
| // Generate some example forms using the modal API forms interface | // Generate some example forms using the modal API forms interface | ||||||
| const fields = partCategoryFields({}); | const fields = partCategoryFields(); | ||||||
|  |  | ||||||
| function ApiFormsPlayground() { | function ApiFormsPlayground() { | ||||||
|   const editCategory = useEditApiFormModal({ |   const editCategory = useEditApiFormModal({ | ||||||
|   | |||||||
| @@ -89,7 +89,7 @@ export function SecurityContent() { | |||||||
|   ); |   ); | ||||||
| } | } | ||||||
|  |  | ||||||
| function EmailContent({}: {}) { | function EmailContent() { | ||||||
|   const [value, setValue] = useState<string>(''); |   const [value, setValue] = useState<string>(''); | ||||||
|   const [newEmailValue, setNewEmailValue] = useState(''); |   const [newEmailValue, setNewEmailValue] = useState(''); | ||||||
|   const [user] = useUserState((state) => [state.user]); |   const [user] = useUserState((state) => [state.user]); | ||||||
| @@ -321,7 +321,7 @@ function SsoContent({ dataProvider }: { dataProvider: any | undefined }) { | |||||||
|   ); |   ); | ||||||
| } | } | ||||||
|  |  | ||||||
| function MfaContent({}: {}) { | function MfaContent() { | ||||||
|   return ( |   return ( | ||||||
|     <> |     <> | ||||||
|       MFA Details |       MFA Details | ||||||
|   | |||||||
| @@ -42,7 +42,7 @@ import { PartListTable } from '../../tables/part/PartTable'; | |||||||
|  * |  * | ||||||
|  * Note: If no category ID is supplied, this acts as the top-level part category page |  * Note: If no category ID is supplied, this acts as the top-level part category page | ||||||
|  */ |  */ | ||||||
| export default function CategoryDetail({}: {}) { | export default function CategoryDetail() { | ||||||
|   const { id: _id } = useParams(); |   const { id: _id } = useParams(); | ||||||
|   const id = useMemo( |   const id = useMemo( | ||||||
|     () => (!isNaN(parseInt(_id || '')) ? _id : undefined), |     () => (!isNaN(parseInt(_id || '')) ? _id : undefined), | ||||||
| @@ -158,7 +158,7 @@ export default function CategoryDetail({}: {}) { | |||||||
|     url: ApiEndpoints.category_list, |     url: ApiEndpoints.category_list, | ||||||
|     pk: id, |     pk: id, | ||||||
|     title: t`Edit Part Category`, |     title: t`Edit Part Category`, | ||||||
|     fields: partCategoryFields({}), |     fields: partCategoryFields(), | ||||||
|     onFormSuccess: refreshInstance |     onFormSuccess: refreshInstance | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -21,10 +21,9 @@ function AccordionControl(props: AccordionControlProps) { | |||||||
|   return ( |   return ( | ||||||
|     <Box style={{ display: 'flex', alignItems: 'center' }}> |     <Box style={{ display: 'flex', alignItems: 'center' }}> | ||||||
|       {props.disabled && ( |       {props.disabled && ( | ||||||
|         <Tooltip |         <Tooltip label={t`No data available`}> | ||||||
|           label={t`No data available`} |           <IconAlertCircle size="1rem" color="gray" /> | ||||||
|           children={<IconAlertCircle size="1rem" color="gray" />} |         </Tooltip> | ||||||
|         /> |  | ||||||
|       )} |       )} | ||||||
|       <Accordion.Control |       <Accordion.Control | ||||||
|         {...props} |         {...props} | ||||||
|   | |||||||
| @@ -210,7 +210,7 @@ export default function Stock() { | |||||||
|     url: ApiEndpoints.stock_location_list, |     url: ApiEndpoints.stock_location_list, | ||||||
|     pk: id, |     pk: id, | ||||||
|     title: t`Edit Stock Location`, |     title: t`Edit Stock Location`, | ||||||
|     fields: stockLocationFields({}), |     fields: stockLocationFields(), | ||||||
|     onFormSuccess: refreshInstance |     onFormSuccess: refreshInstance | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -608,7 +608,7 @@ export function InvenTreeTable<T = any>({ | |||||||
|                 enableLabels={tableProps.enableLabels} |                 enableLabels={tableProps.enableLabels} | ||||||
|                 enableReports={tableProps.enableReports} |                 enableReports={tableProps.enableReports} | ||||||
|               /> |               /> | ||||||
|               {(tableProps.barcodeActions?.length ?? 0 > 0) && ( |               {(tableProps.barcodeActions?.length ?? 0) > 0 && ( | ||||||
|                 <ButtonMenu |                 <ButtonMenu | ||||||
|                   key="barcode-actions" |                   key="barcode-actions" | ||||||
|                   icon={<IconBarcode />} |                   icon={<IconBarcode />} | ||||||
|   | |||||||
| @@ -76,7 +76,7 @@ export function PartCategoryTable({ parentId }: { parentId?: any }) { | |||||||
|   const newCategory = useCreateApiFormModal({ |   const newCategory = useCreateApiFormModal({ | ||||||
|     url: ApiEndpoints.category_list, |     url: ApiEndpoints.category_list, | ||||||
|     title: t`New Part Category`, |     title: t`New Part Category`, | ||||||
|     fields: partCategoryFields({}), |     fields: partCategoryFields(), | ||||||
|     initialData: { |     initialData: { | ||||||
|       parent: parentId |       parent: parentId | ||||||
|     }, |     }, | ||||||
| @@ -91,7 +91,7 @@ export function PartCategoryTable({ parentId }: { parentId?: any }) { | |||||||
|     url: ApiEndpoints.category_list, |     url: ApiEndpoints.category_list, | ||||||
|     pk: selectedCategory, |     pk: selectedCategory, | ||||||
|     title: t`Edit Part Category`, |     title: t`Edit Part Category`, | ||||||
|     fields: partCategoryFields({}), |     fields: partCategoryFields(), | ||||||
|     onFormSuccess: (record: any) => table.updateRecord(record) |     onFormSuccess: (record: any) => table.updateRecord(record) | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ import { TableFilter } from '../Filter'; | |||||||
| import { InvenTreeTable } from '../InvenTreeTable'; | import { InvenTreeTable } from '../InvenTreeTable'; | ||||||
| import { RowDeleteAction, RowEditAction } from '../RowActions'; | import { RowDeleteAction, RowEditAction } from '../RowActions'; | ||||||
|  |  | ||||||
| export default function PartCategoryTemplateTable({}: {}) { | export default function PartCategoryTemplateTable() { | ||||||
|   const table = useTable('part-category-parameter-templates'); |   const table = useTable('part-category-parameter-templates'); | ||||||
|   const user = useUserState(); |   const user = useUserState(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -97,7 +97,7 @@ export function StockLocationTable({ parentId }: { parentId?: any }) { | |||||||
|   const newLocation = useCreateApiFormModal({ |   const newLocation = useCreateApiFormModal({ | ||||||
|     url: ApiEndpoints.stock_location_list, |     url: ApiEndpoints.stock_location_list, | ||||||
|     title: t`Add Stock Location`, |     title: t`Add Stock Location`, | ||||||
|     fields: stockLocationFields({}), |     fields: stockLocationFields(), | ||||||
|     initialData: { |     initialData: { | ||||||
|       parent: parentId |       parent: parentId | ||||||
|     }, |     }, | ||||||
| @@ -112,7 +112,7 @@ export function StockLocationTable({ parentId }: { parentId?: any }) { | |||||||
|     url: ApiEndpoints.stock_location_list, |     url: ApiEndpoints.stock_location_list, | ||||||
|     pk: selectedLocation, |     pk: selectedLocation, | ||||||
|     title: t`Edit Stock Location`, |     title: t`Edit Stock Location`, | ||||||
|     fields: stockLocationFields({}), |     fields: stockLocationFields(), | ||||||
|     onFormSuccess: (record: any) => table.updateRecord(record) |     onFormSuccess: (record: any) => table.updateRecord(record) | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user