mirror of
https://github.com/formbricks/formbricks.git
synced 2026-03-19 00:23:35 -05:00
Compare commits
1 Commits
fix-date-s
...
fix/sonar-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e9650ef12f |
2
.github/workflows/sonarqube.yml
vendored
2
.github/workflows/sonarqube.yml
vendored
@@ -4,7 +4,7 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
types: [opened, synchronize, reopened]
|
||||
merge_group:
|
||||
permissions:
|
||||
|
||||
@@ -5,7 +5,7 @@ permissions:
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request_target:
|
||||
pull_request:
|
||||
types: [opened, synchronize, reopened]
|
||||
|
||||
jobs:
|
||||
@@ -14,13 +14,6 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.base.ref }}
|
||||
|
||||
- name: Checkout PR
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
|
||||
23
.github/workflows/tolgee.yml
vendored
23
.github/workflows/tolgee.yml
vendored
@@ -3,7 +3,7 @@ permissions:
|
||||
contents: read
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
pull_request:
|
||||
types: [closed]
|
||||
branches:
|
||||
- main
|
||||
@@ -23,16 +23,18 @@ jobs:
|
||||
- name: Get source branch name
|
||||
id: branch-name
|
||||
run: |
|
||||
RAW_BRANCH="${{ github.head_ref }}"
|
||||
SOURCE_BRANCH=$(echo "$RAW_BRANCH" | sed 's/[^a-zA-Z0-9._\/-]//g')
|
||||
# For PR merges, use the head ref from the pull request event
|
||||
SOURCE_BRANCH="${{ github.head_ref }}"
|
||||
|
||||
# Only remove username prefix if needed
|
||||
if [[ "$SOURCE_BRANCH" =~ ^[a-zA-Z0-9][a-zA-Z0-9-]+/ ]]; then
|
||||
PREFIX=${SOURCE_BRANCH%%/*}
|
||||
if [[ ! "$PREFIX" =~ ^(feature|fix|bugfix|hotfix|release|chore|docs|test|refactor|style|perf|build|ci|revert)$ ]]; then
|
||||
SOURCE_BRANCH=${SOURCE_BRANCH#*/}
|
||||
fi
|
||||
fi
|
||||
|
||||
# Safely add to environment variables using GitHub's recommended method
|
||||
# This prevents environment variable injection attacks
|
||||
echo "SOURCE_BRANCH<<EOF" >> $GITHUB_ENV
|
||||
echo "$SOURCE_BRANCH" >> $GITHUB_ENV
|
||||
echo "EOF" >> $GITHUB_ENV
|
||||
|
||||
echo "SOURCE_BRANCH=$SOURCE_BRANCH" >> $GITHUB_ENV
|
||||
echo "Detected source branch: $SOURCE_BRANCH"
|
||||
|
||||
- name: Setup Node.js
|
||||
@@ -51,7 +53,6 @@ jobs:
|
||||
--filter-tag "draft:${SOURCE_BRANCH}" \
|
||||
--tag production \
|
||||
--untag "draft:${SOURCE_BRANCH}"
|
||||
--verbose
|
||||
|
||||
- name: Tag unused production keys as Deprecated
|
||||
run: |
|
||||
@@ -59,7 +60,6 @@ jobs:
|
||||
--api-key ${{ secrets.TOLGEE_API_KEY }} \
|
||||
--filter-not-extracted --filter-tag production \
|
||||
--tag deprecated --untag production
|
||||
--verbose
|
||||
|
||||
- name: Tag unused draft:current-branch keys as Deprecated
|
||||
run: |
|
||||
@@ -67,7 +67,6 @@ jobs:
|
||||
--api-key ${{ secrets.TOLGEE_API_KEY }} \
|
||||
--filter-not-extracted --filter-tag "draft:${SOURCE_BRANCH}" \
|
||||
--tag deprecated --untag "draft:${SOURCE_BRANCH}"
|
||||
--verbose
|
||||
|
||||
- name: Sync with backup
|
||||
run: |
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -53,5 +53,4 @@ yarn-error.log*
|
||||
packages/lib/uploads
|
||||
apps/web/public/js
|
||||
packages/database/migrations
|
||||
branch.json
|
||||
.vercel
|
||||
branch.json
|
||||
@@ -75,7 +75,6 @@ export const sendEmail = async (emailData: SendEmailDataProps): Promise<boolean>
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error("Error in sendEmail:", error);
|
||||
throw new InvalidInputError("Incorrect SMTP credentials");
|
||||
}
|
||||
};
|
||||
|
||||
@@ -36,36 +36,6 @@ export function FileInput({
|
||||
const [isUploading, setIsUploading] = useState(false);
|
||||
const [parent] = useAutoAnimate();
|
||||
|
||||
// Helper function to filter duplicate files
|
||||
const filterDuplicateFiles = <T extends { name: string }>(
|
||||
files: T[],
|
||||
checkAgainstSelected: boolean = true
|
||||
): {
|
||||
filteredFiles: T[];
|
||||
duplicateFiles: T[];
|
||||
} => {
|
||||
const existingFileNames = fileUrls ? fileUrls.map(getOriginalFileNameFromUrl) : [];
|
||||
|
||||
const duplicateFiles = files.filter(
|
||||
(file) =>
|
||||
existingFileNames.includes(file.name) ||
|
||||
(checkAgainstSelected && selectedFiles.some((selectedFile) => selectedFile.name === file.name))
|
||||
);
|
||||
|
||||
const filteredFiles = files.filter(
|
||||
(file) =>
|
||||
!existingFileNames.includes(file.name) &&
|
||||
(!checkAgainstSelected || !selectedFiles.some((selectedFile) => selectedFile.name === file.name))
|
||||
);
|
||||
|
||||
if (duplicateFiles.length > 0) {
|
||||
const duplicateNames = duplicateFiles.map((file) => file.name).join(", ");
|
||||
alert(`The following files are already uploaded: ${duplicateNames}. Duplicate files are not allowed.`);
|
||||
}
|
||||
|
||||
return { filteredFiles, duplicateFiles };
|
||||
};
|
||||
|
||||
// Listen for the native file-upload event dispatched via window.formbricksSurveys.onFilePick
|
||||
useEffect(() => {
|
||||
const handleNativeFileUpload = async (
|
||||
@@ -77,7 +47,7 @@ export function FileInput({
|
||||
setIsUploading(true);
|
||||
|
||||
// Filter out files that exceed the maximum size
|
||||
let filteredFiles: typeof filesFromNative = [];
|
||||
const filteredFiles: typeof filesFromNative = [];
|
||||
const rejectedFiles: string[] = [];
|
||||
|
||||
if (maxSizeInMB) {
|
||||
@@ -97,10 +67,6 @@ export function FileInput({
|
||||
filteredFiles.push(...filesFromNative);
|
||||
}
|
||||
|
||||
// Check for duplicate files - native uploads don't need to check against selectedFiles
|
||||
const { filteredFiles: nonDuplicateFiles } = filterDuplicateFiles(filteredFiles, false);
|
||||
filteredFiles = nonDuplicateFiles;
|
||||
|
||||
// Display alert for rejected files
|
||||
if (rejectedFiles.length > 0) {
|
||||
const fileNames = rejectedFiles.join(", ");
|
||||
@@ -147,7 +113,7 @@ export function FileInput({
|
||||
};
|
||||
|
||||
const handleFileSelection = async (files: FileList) => {
|
||||
let fileArray = Array.from(files);
|
||||
const fileArray = Array.from(files);
|
||||
|
||||
if (!allowMultipleFiles && fileArray.length > 1) {
|
||||
alert("Only one file can be uploaded at a time.");
|
||||
@@ -159,17 +125,8 @@ export function FileInput({
|
||||
return;
|
||||
}
|
||||
|
||||
// Check for duplicate files
|
||||
const { filteredFiles: nonDuplicateFiles } = filterDuplicateFiles(fileArray);
|
||||
|
||||
if (nonDuplicateFiles.length === 0) {
|
||||
return; // No non-duplicate files to process
|
||||
}
|
||||
|
||||
fileArray = nonDuplicateFiles;
|
||||
|
||||
// filter out files that are not allowed
|
||||
const validFiles = fileArray.filter((file) => {
|
||||
const validFiles = Array.from(files).filter((file) => {
|
||||
const fileExtension = file.type.substring(file.type.lastIndexOf("/") + 1) as TAllowedFileExtension;
|
||||
if (allowedFileExtensions) {
|
||||
return allowedFileExtensions.includes(fileExtension);
|
||||
|
||||
Reference in New Issue
Block a user