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:
Matthias Mair 2024-07-17 15:45:11 +02:00 committed by GitHub
parent 234b0ed72c
commit 547fa179c5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 38 additions and 34 deletions

View File

@ -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")

View File

@ -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)

View File

@ -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];
} }
} }

View File

@ -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" />
)}
</> </>
); );
} }

View File

@ -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`,

View File

@ -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`,

View File

@ -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();
} }

View File

@ -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({

View File

@ -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

View File

@ -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
}); });

View File

@ -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}

View File

@ -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
}); });

View File

@ -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 />}

View File

@ -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)
}); });

View File

@ -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();

View File

@ -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)
}); });