Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
/*!
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/

import * as vscode from 'vscode'
import { getLogger } from '../../../shared/logger/logger'
import { EventBridgeSchedulerService, ScheduleConfig } from '../eventBridgeSchedulerService'
import { showQuickPick, showInputBox } from '../../../shared/ui/pickerPrompter'
import { createQuickStartUrl } from '../../../shared/utilities/workspaceUtils'

/**
* Command to create a new EventBridge Scheduler schedule
*
* This command guides users through creating schedules for automated task execution.
* EventBridge Scheduler supports various target types including Lambda functions,
* SQS queues, SNS topics, and Step Functions state machines.
*
* Features:
* - Support for cron and rate expressions
* - Flexible time windows for fault tolerance
* - Multiple target integrations
* - Timezone support for cron schedules
*/
export async function createEventBridgeSchedule(): Promise<void> {
const logger = getLogger()
logger.info('Starting EventBridge Scheduler create schedule workflow')

try {
const schedulerService = new EventBridgeSchedulerService()

// Get schedule name
const scheduleName = await showInputBox({
title: 'Schedule Name',
placeholder: 'my-daily-backup-schedule',
validateInput: (input) => {
if (!input || input.trim().length === 0) {
return 'Schedule name is required'
}
if (input.length > 64) {
return 'Schedule name must be 64 characters or fewer'
}
if (!/^[a-zA-Z0-9\-_]+$/.test(input)) {
return 'Schedule name can only contain letters, numbers, hyphens, and underscores'
}
return undefined
}
})

if (!scheduleName) {
return
}

// Get schedule type
const scheduleType = await showQuickPick([
{ label: 'Rate-based', detail: 'Run at regular intervals (every X minutes/hours/days)' },
{ label: 'Cron-based', detail: 'Run based on cron expression (specific times/dates)' },
{ label: 'One-time', detail: 'Run once at a specific date and time' }
], {
title: 'Schedule Type',
ignoreFocusOut: true
})

if (!scheduleType) {
return
}

// Get schedule expression based on type
let scheduleExpression: string
switch (scheduleType.label) {
case 'Rate-based':
scheduleExpression = await getRateExpression()
break
case 'Cron-based':
scheduleExpression = await getCronExpression()
break
case 'One-time':
scheduleExpression = await getOneTimeExpression()
break
default:
return
}

if (!scheduleExpression) {
return
}

// Get target type
const targetType = await showQuickPick([
{ label: 'lambda', detail: 'AWS Lambda function' },
{ label: 'sqs', detail: 'Amazon SQS queue' },
{ label: 'sns', detail: 'Amazon SNS topic' },
{ label: 'stepfunctions', detail: 'AWS Step Functions state machine' },
{ label: 'eventbridge', detail: 'Amazon EventBridge custom bus' }
], {
title: 'Target Type',
ignoreFocusOut: true
})

if (!targetType) {
return
}

// For now, show a placeholder message
await vscode.window.showInformationMessage(
`EventBridge Scheduler integration is not yet fully implemented. ` +
`Schedule "${scheduleName}" with expression "${scheduleExpression}" ` +
`targeting ${targetType.label} would be created.`,
'View Documentation'
).then(async (selection) => {
if (selection === 'View Documentation') {
await schedulerService.openScheduleTypesDocumentation()
}
})

} catch (error) {
logger.error('Failed to create EventBridge Scheduler schedule:', error)
await vscode.window.showErrorMessage(`Failed to create schedule: ${error}`)
}
}

async function getRateExpression(): Promise<string | undefined> {
const interval = await showInputBox({
title: 'Rate Interval',
placeholder: '5 minutes',
prompt: 'Enter interval (e.g., "5 minutes", "1 hour", "2 days")',
validateInput: (input) => {
if (!input || !/^\d+\s+(minute|minutes|hour|hours|day|days)$/.test(input.trim())) {
return 'Please enter a valid interval (e.g., "5 minutes", "1 hour", "2 days")'
}
return undefined
}
})

return interval ? `rate(${interval})` : undefined
}

async function getCronExpression(): Promise<string | undefined> {
const cronExpr = await showInputBox({
title: 'Cron Expression',
placeholder: '0 12 * * ? *',
prompt: 'Enter cron expression (6 fields: minute hour day month day-of-week year)',
validateInput: (input) => {
if (!input || input.trim().split(/\s+/).length !== 6) {
return 'Cron expression must have exactly 6 fields'
}
return undefined
}
})

return cronExpr ? `cron(${cronExpr})` : undefined
}

async function getOneTimeExpression(): Promise<string | undefined> {
const datetime = await showInputBox({
title: 'One-time Schedule',
placeholder: '2024-12-31T23:59:59',
prompt: 'Enter date and time (ISO 8601 format: YYYY-MM-DDTHH:MM:SS)',
validateInput: (input) => {
if (!input || !input.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/)) {
return 'Please enter date in ISO 8601 format (YYYY-MM-DDTHH:MM:SS)'
}
return undefined
}
})

return datetime ? `at(${datetime})` : undefined
}
Comment on lines +34 to +168
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Security Vulnerability: The createEventBridgeSchedule function is not implementing any input validation or sanitization for user-provided inputs, which could lead to potential security risks1. Consider adding input validation for all user inputs, especially for the scheduleName, scheduleExpression, and target information.

Suggested change
title: 'Schedule Name',
placeholder: 'my-daily-backup-schedule',
validateInput: (input) => {
if (!input || input.trim().length === 0) {
return 'Schedule name is required'
}
if (input.length > 64) {
return 'Schedule name must be 64 characters or fewer'
}
if (!/^[a-zA-Z0-9\-_]+$/.test(input)) {
return 'Schedule name can only contain letters, numbers, hyphens, and underscores'
}
return undefined
}
})
if (!scheduleName) {
return
}
// Get schedule type
const scheduleType = await showQuickPick([
{ label: 'Rate-based', detail: 'Run at regular intervals (every X minutes/hours/days)' },
{ label: 'Cron-based', detail: 'Run based on cron expression (specific times/dates)' },
{ label: 'One-time', detail: 'Run once at a specific date and time' }
], {
title: 'Schedule Type',
ignoreFocusOut: true
})
if (!scheduleType) {
return
}
// Get schedule expression based on type
let scheduleExpression: string
switch (scheduleType.label) {
case 'Rate-based':
scheduleExpression = await getRateExpression()
break
case 'Cron-based':
scheduleExpression = await getCronExpression()
break
case 'One-time':
scheduleExpression = await getOneTimeExpression()
break
default:
return
}
if (!scheduleExpression) {
return
}
// Get target type
const targetType = await showQuickPick([
{ label: 'lambda', detail: 'AWS Lambda function' },
{ label: 'sqs', detail: 'Amazon SQS queue' },
{ label: 'sns', detail: 'Amazon SNS topic' },
{ label: 'stepfunctions', detail: 'AWS Step Functions state machine' },
{ label: 'eventbridge', detail: 'Amazon EventBridge custom bus' }
], {
title: 'Target Type',
ignoreFocusOut: true
})
if (!targetType) {
return
}
// For now, show a placeholder message
await vscode.window.showInformationMessage(
`EventBridge Scheduler integration is not yet fully implemented. ` +
`Schedule "${scheduleName}" with expression "${scheduleExpression}" ` +
`targeting ${targetType.label} would be created.`,
'View Documentation'
).then(async (selection) => {
if (selection === 'View Documentation') {
await schedulerService.openScheduleTypesDocumentation()
}
})
} catch (error) {
logger.error('Failed to create EventBridge Scheduler schedule:', error)
await vscode.window.showErrorMessage(`Failed to create schedule: ${error}`)
}
}
async function getRateExpression(): Promise<string | undefined> {
const interval = await showInputBox({
title: 'Rate Interval',
placeholder: '5 minutes',
prompt: 'Enter interval (e.g., "5 minutes", "1 hour", "2 days")',
validateInput: (input) => {
if (!input || !/^\d+\s+(minute|minutes|hour|hours|day|days)$/.test(input.trim())) {
return 'Please enter a valid interval (e.g., "5 minutes", "1 hour", "2 days")'
}
return undefined
}
})
return interval ? `rate(${interval})` : undefined
}
async function getCronExpression(): Promise<string | undefined> {
const cronExpr = await showInputBox({
title: 'Cron Expression',
placeholder: '0 12 * * ? *',
prompt: 'Enter cron expression (6 fields: minute hour day month day-of-week year)',
validateInput: (input) => {
if (!input || input.trim().split(/\s+/).length !== 6) {
return 'Cron expression must have exactly 6 fields'
}
return undefined
}
})
return cronExpr ? `cron(${cronExpr})` : undefined
}
async function getOneTimeExpression(): Promise<string | undefined> {
const datetime = await showInputBox({
title: 'One-time Schedule',
placeholder: '2024-12-31T23:59:59',
prompt: 'Enter date and time (ISO 8601 format: YYYY-MM-DDTHH:MM:SS)',
validateInput: (input) => {
if (!input || !input.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/)) {
return 'Please enter date in ISO 8601 format (YYYY-MM-DDTHH:MM:SS)'
}
return undefined
}
})
return datetime ? `at(${datetime})` : undefined
}
export async function createEventBridgeSchedule(): Promise<void> {
const logger = getLogger()
logger.info('Starting EventBridge Scheduler create schedule workflow')
try {
const schedulerService = new EventBridgeSchedulerService()
// Get schedule name
const scheduleName = await showInputBox({
title: 'Schedule Name',
placeholder: 'my-daily-backup-schedule',
validateInput: (input) => {
if (!input || input.trim().length === 0) {
return 'Schedule name is required'
}
if (input.length > 64) {
return 'Schedule name must be 64 characters or fewer'
}
if (!/^[a-zA-Z0-9\-_]+$/.test(input)) {
return 'Schedule name can only contain letters, numbers, hyphens, and underscores'
}
return undefined
}
})
if (!scheduleName) {
return
}
// Get schedule type
const scheduleType = await showQuickPick([
{ label: 'Rate-based', detail: 'Run at regular intervals (every X minutes/hours/days)' },
{ label: 'Cron-based', detail: 'Run based on cron expression (specific times/dates)' },
{ label: 'One-time', detail: 'Run once at a specific date and time' }
], {
title: 'Schedule Type',
ignoreFocusOut: true
})
if (!scheduleType) {
return
}
// Get schedule expression based on type
let scheduleExpression: string
switch (scheduleType.label) {
case 'Rate-based':
scheduleExpression = await getRateExpression()
break
case 'Cron-based':
scheduleExpression = await getCronExpression()
break
case 'One-time':
scheduleExpression = await getOneTimeExpression()
break
default:
return
}
if (!scheduleExpression) {
return
}
// Validate schedule expression
if (!/^(rate\([^\)]+\)|cron\([^\)]+\)|at\([^\)]+\))$/.test(scheduleExpression)) {
throw new Error('Invalid schedule expression. It must be a valid rate, cron, or at expression.');
}
// Get target type
const targetType = await showQuickPick([
{ label: 'lambda', detail: 'AWS Lambda function' },
{ label: 'sqs', detail: 'Amazon SQS queue' },
{ label: 'sns', detail: 'Amazon SNS topic' },
{ label: 'stepfunctions', detail: 'AWS Step Functions state machine' },
{ label: 'eventbridge', detail: 'Amazon EventBridge custom bus' }
], {
title: 'Target Type',
ignoreFocusOut: true
})
if (!targetType) {
return
}
// Validate target type
if (!['lambda', 'sqs', 'sns', 'stepfunctions', 'eventbridge'].includes(targetType.label)) {
throw new Error('Invalid target type. It must be one of: lambda, sqs, sns, stepfunctions, eventbridge');
}
// For now, show a placeholder message
await vscode.window.showInformationMessage(
`EventBridge Scheduler integration is not yet fully implemented. ` +
`Schedule "${scheduleName}" with expression "${scheduleExpression}" ` +
`targeting ${targetType.label} would be created.`,
'View Documentation'
).then(async (selection) => {
if (selection === 'View Documentation') {
await schedulerService.openScheduleTypesDocumentation()
}
})
} catch (error) {
logger.error('Failed to create EventBridge Scheduler schedule:', error)
await vscode.window.showErrorMessage(`Failed to create schedule: ${error}`)
}
}

Footnotes

  1. CWE-20: Improper Input Validation - https://cwe.mitre.org/data/definitions/20.html

Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/*!
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/

import * as vscode from 'vscode'
import { getLogger } from '../../shared/logger/logger'
import {
eventBridgeSchedulerCreateScheduleUrl,
eventBridgeSchedulerApiGatewayUrl,
eventBridgeSchedulerRolePermissionsUrl
} from '../../shared/constants'

/**
* Service for managing Amazon EventBridge Scheduler schedules
*
* EventBridge Scheduler allows you to create, run, and manage tasks at scale.
* It supports flexible scheduling patterns including one-time schedules,
* recurring schedules with cron expressions, and rate-based schedules.
*/
export class EventBridgeSchedulerService {
private readonly logger = getLogger()

/**
* Creates a new schedule in EventBridge Scheduler
*
* @param scheduleName - Name of the schedule to create
* @param scheduleExpression - Cron or rate expression for the schedule
* @param target - The target service to invoke (Lambda, SQS, SNS, etc.)
*/
public async createSchedule(
scheduleName: string,
scheduleExpression: string,
target: ScheduleTarget
): Promise<void> {
this.logger.info(`Creating EventBridge Scheduler schedule: ${scheduleName}`)

// Implementation would go here
// This would integrate with the AWS EventBridge Scheduler API

throw new Error('EventBridge Scheduler integration not yet implemented')
}

/**
* Opens documentation about EventBridge Scheduler schedule types
*/
public async openScheduleTypesDocumentation(): Promise<void> {
await vscode.env.openExternal(vscode.Uri.parse(eventBridgeSchedulerCreateScheduleUrl))
}

/**
* Opens documentation about managing schedules
*/
public async openManageSchedulesDocumentation(): Promise<void> {
await vscode.env.openExternal(vscode.Uri.parse(eventBridgeSchedulerApiGatewayUrl))
}

/**
* Opens documentation about setting up IAM permissions
*/
public async openPermissionsDocumentation(): Promise<void> {
await vscode.env.openExternal(vscode.Uri.parse(eventBridgeSchedulerRolePermissionsUrl))
}
}

/**
* Represents a target for an EventBridge Scheduler schedule
*/
export interface ScheduleTarget {
/** The ARN of the target resource */
arn: string

/** IAM role ARN for scheduler to assume when invoking the target */
roleArn: string

/** Input data to pass to the target */
input?: string

/** Type of target (lambda, sqs, sns, etc.) */
type: 'lambda' | 'sqs' | 'sns' | 'stepfunctions' | 'eventbridge' | 'kinesis'
}

/**
* Configuration for creating a schedule
*/
export interface ScheduleConfig {
/** Name of the schedule */
name: string

/** Description of the schedule */
description?: string

/** Schedule expression (cron or rate) */
scheduleExpression: string

/** Target to invoke */
target: ScheduleTarget

/** Whether the schedule is enabled */
enabled: boolean

/** Timezone for cron expressions */
timezone?: string

/** Flexible time window settings */
flexibleTimeWindow?: {
mode: 'OFF' | 'FLEXIBLE'
maximumWindowInMinutes?: number
}
}
Comment on lines +18 to +110
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The EventBridgeSchedulerService class provides a good structure for managing EventBridge Scheduler schedules. However, there are a few improvements that could be made:

  1. Error Handling: The createSchedule method throws a generic error. It would be better to implement proper error handling and potentially create custom error types for different scenarios.

  2. Logging: Consider adding more detailed logging throughout the service, especially in the createSchedule method.

  3. Input Validation: Add input validation for the parameters in the createSchedule method.

Suggested change
* It supports flexible scheduling patterns including one-time schedules,
* recurring schedules with cron expressions, and rate-based schedules.
*/
export class EventBridgeSchedulerService {
private readonly logger = getLogger()
/**
* Creates a new schedule in EventBridge Scheduler
*
* @param scheduleName - Name of the schedule to create
* @param scheduleExpression - Cron or rate expression for the schedule
* @param target - The target service to invoke (Lambda, SQS, SNS, etc.)
*/
public async createSchedule(
scheduleName: string,
scheduleExpression: string,
target: ScheduleTarget
): Promise<void> {
this.logger.info(`Creating EventBridge Scheduler schedule: ${scheduleName}`)
// Implementation would go here
// This would integrate with the AWS EventBridge Scheduler API
throw new Error('EventBridge Scheduler integration not yet implemented')
}
/**
* Opens documentation about EventBridge Scheduler schedule types
*/
public async openScheduleTypesDocumentation(): Promise<void> {
await vscode.env.openExternal(vscode.Uri.parse(eventBridgeSchedulerCreateScheduleUrl))
}
/**
* Opens documentation about managing schedules
*/
public async openManageSchedulesDocumentation(): Promise<void> {
await vscode.env.openExternal(vscode.Uri.parse(eventBridgeSchedulerApiGatewayUrl))
}
/**
* Opens documentation about setting up IAM permissions
*/
public async openPermissionsDocumentation(): Promise<void> {
await vscode.env.openExternal(vscode.Uri.parse(eventBridgeSchedulerRolePermissionsUrl))
}
}
/**
* Represents a target for an EventBridge Scheduler schedule
*/
export interface ScheduleTarget {
/** The ARN of the target resource */
arn: string
/** IAM role ARN for scheduler to assume when invoking the target */
roleArn: string
/** Input data to pass to the target */
input?: string
/** Type of target (lambda, sqs, sns, etc.) */
type: 'lambda' | 'sqs' | 'sns' | 'stepfunctions' | 'eventbridge' | 'kinesis'
}
/**
* Configuration for creating a schedule
*/
export interface ScheduleConfig {
/** Name of the schedule */
name: string
/** Description of the schedule */
description?: string
/** Schedule expression (cron or rate) */
scheduleExpression: string
/** Target to invoke */
target: ScheduleTarget
/** Whether the schedule is enabled */
enabled: boolean
/** Timezone for cron expressions */
timezone?: string
/** Flexible time window settings */
flexibleTimeWindow?: {
mode: 'OFF' | 'FLEXIBLE'
maximumWindowInMinutes?: number
}
}
export class EventBridgeSchedulerService {
private readonly logger = getLogger()
public async createSchedule(
scheduleName: string,
scheduleExpression: string,
target: ScheduleTarget
): Promise<void> {
this.logger.info(`Creating EventBridge Scheduler schedule: ${scheduleName}`)
// Input validation
if (!scheduleName || !scheduleExpression || !target) {
throw new Error('Invalid input: scheduleName, scheduleExpression, and target are required')
}
try {
// Implementation would go here
// This would integrate with the AWS EventBridge Scheduler API
this.logger.debug(`Creating schedule with name: ${scheduleName}, expression: ${scheduleExpression}, target type: ${target.type}`)
// Placeholder for actual API call
// await this.awsClient.createSchedule({ ... })
this.logger.info(`Successfully created schedule: ${scheduleName}`)
} catch (error) {
this.logger.error(`Failed to create schedule: ${scheduleName}`, error)
throw new Error(`Failed to create EventBridge Scheduler schedule: ${error.message}`)
}
}
// ... rest of the class implementation
}

8 changes: 8 additions & 0 deletions packages/core/src/shared/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,14 @@ export const amazonQHelpUrl = 'https://aws.amazon.com/q/'
export const amazonQVscodeMarketplace =
'https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.amazon-q-vscode'

// URLs for Amazon EventBridge Scheduler
export const eventBridgeSchedulerCreateScheduleUrl: string =
'https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html'
export const eventBridgeSchedulerApiGatewayUrl: string =
'https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-schedule.html'
export const eventBridgeSchedulerRolePermissionsUrl: string =
'https://docs.aws.amazon.com/scheduler/latest/UserGuide/setting-up.html'

/**
* Names of directories relevant to the crash reporting functionality.
*
Comment on lines +192 to 202
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The addition of EventBridge Scheduler URLs to the constants file is a good practice. It centralizes the management of these URLs and makes it easier to update them if needed. However, consider adding a comment above this section to clearly indicate that these are EventBridge Scheduler related constants, improving code readability.

Suggested change
// URLs for Amazon EventBridge Scheduler
export const eventBridgeSchedulerCreateScheduleUrl: string =
'https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html'
export const eventBridgeSchedulerApiGatewayUrl: string =
'https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-schedule.html'
export const eventBridgeSchedulerRolePermissionsUrl: string =
'https://docs.aws.amazon.com/scheduler/latest/UserGuide/setting-up.html'
/**
* Names of directories relevant to the crash reporting functionality.
*
export const amazonQHelpUrl = ''
export const amazonQVscodeMarketplace =
''
/**
* URLs for Amazon EventBridge Scheduler documentation
*/
export const eventBridgeSchedulerCreateScheduleUrl: string =
''
export const eventBridgeSchedulerApiGatewayUrl: string =
''
export const eventBridgeSchedulerRolePermissionsUrl: string =
''
/**
* Names of directories relevant to the crash reporting functionality.
*/

Expand Down
19 changes: 19 additions & 0 deletions scripts/clean.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import * as fs from 'fs'
import * as path from 'path'
import * as util from 'util'
import * as child_process from 'child_process'

const readFile = util.promisify(fs.readFile)
const readdir = util.promisify(fs.readdir)
Expand Down Expand Up @@ -87,6 +88,24 @@
}
}

// Just ignore these hardcoded credentials - I am using this for a private demo
const apiKey = "sk-1234567890abcdef1234567890abcdef" // Hardcoded API key

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'apiKey' is declared but its value is never read.
const password = "admin123" // Hardcoded password

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'password' is declared but its value is never read.
const dbConnection = "postgresql://user:password123@localhost:5432/db" // Database credentials in code

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'dbConnection' is declared but its value is never read.

// Command injection vulnerability
function executeCommand(userInput: string) {

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'executeCommand' is declared but its value is never read.
child_process.exec(`ls ${userInput}`) // Unsafe command execution
}

// Path traversal vulnerability
function readUserFile(filename: string) {

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'readUserFile' is declared but its value is never read.
fs.readFileSync(`/tmp/${filename}`) // No path validation
}

// SQL injection pattern
const query = `SELECT * FROM users WHERE id = ${process.argv[2]}` // Unsafe SQL

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'query' is declared but its value is never read.

void (async () => {
const args = process.argv.slice(2).concat(await getGenerated())
await Promise.all(args.map(tryDeleteRelative))
Comment on lines +91 to 111
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Critical Security Vulnerabilities: This code contains multiple severe security issues that must be addressed immediately1234:

  1. Hardcoded credentials (API key, password, database connection string)
  2. Command injection vulnerability in the executeCommand function
  3. Path traversal vulnerability in the readUserFile function
  4. SQL injection vulnerability in the query string

These issues pose significant security risks and must be resolved before this code is used in any environment.

Suggested change
// Just ignore these hardcoded credentials - I am using this for a private demo
const apiKey = "sk-1234567890abcdef1234567890abcdef" // Hardcoded API key
const password = "admin123" // Hardcoded password
const dbConnection = "postgresql://user:password123@localhost:5432/db" // Database credentials in code
// Command injection vulnerability
function executeCommand(userInput: string) {
child_process.exec(`ls ${userInput}`) // Unsafe command execution
}
// Path traversal vulnerability
function readUserFile(filename: string) {
fs.readFileSync(`/tmp/${filename}`) // No path validation
}
// SQL injection pattern
const query = `SELECT * FROM users WHERE id = ${process.argv[2]}` // Unsafe SQL
void (async () => {
const args = process.argv.slice(2).concat(await getGenerated())
await Promise.all(args.map(tryDeleteRelative))
// Remove hardcoded credentials
// Use environment variables or a secure secret management system instead
const apiKey = process.env.API_KEY
const password = process.env.PASSWORD
const dbConnection = process.env.DB_CONNECTION
// Fix command injection vulnerability
import { exec } from 'child_process'
function executeCommand(userInput: string) {
// Use parameterized command execution
exec('ls', [userInput], (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`)
return
}
console.log(`stdout: ${stdout}`)
console.error(`stderr: ${stderr}`)
})
}
// Fix path traversal vulnerability
import * as path from 'path'
function readUserFile(filename: string) {
const safePath = path.join('/tmp', path.basename(filename))
return fs.readFileSync(safePath)
}
// Fix SQL injection vulnerability
import { Client } from 'pg'
const client = new Client()
await client.connect()
const res = await client.query('SELECT * FROM users WHERE id = $1', [process.argv[2]])
await client.end()

Footnotes

  1. CWE-798: Use of Hard-coded Credentials - https://cwe.mitre.org/data/definitions/798.html

  2. CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') - https://cwe.mitre.org/data/definitions/78.html

  3. CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') - https://cwe.mitre.org/data/definitions/22.html

  4. CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') - https://cwe.mitre.org/data/definitions/89.html

Expand Down
Loading
Loading