Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
f3ac488
ditto web chat code and chat screen designs added
yuvaraj-quest1 Nov 7, 2025
2ba7217
chat list sort based on the recent messages, css theme variable useag…
yuvaraj-quest1 Nov 7, 2025
94da873
Ditto chat screen exported as lib and demo app added
yuvaraj-quest1 Nov 10, 2025
11c7873
Integrated Message Func and Added Rendering Logic with Preview
rohit-quest1 Nov 10, 2025
45e0782
Merge branch 'feature/web-rooms-chat' of https://github.com/getditto/…
rohit-quest1 Nov 10, 2025
023f3d7
Clean Up
rohit-quest1 Nov 10, 2025
b8b6d4b
dm chats options added and message input designs formatted
yuvaraj-quest1 Nov 10, 2025
3b43d6a
Integrated Edit and Delete Message Func
rohit-quest1 Nov 10, 2025
6702518
Removed TAK Code
rohit-quest1 Nov 10, 2025
feab736
new dm duplication creation fix
yuvaraj-quest1 Nov 11, 2025
5a81549
new room creation function implemented
yuvaraj-quest1 Nov 11, 2025
68d5a4f
Added Flags for Edit/Delete and Int File Upload
rohit-quest1 Nov 11, 2025
b1d822c
Merge branch 'feature/web-rooms-chat' of https://github.com/getditto/…
rohit-quest1 Nov 11, 2025
dac3f5a
Fix/Delete Message
rohit-quest1 Nov 11, 2025
cbbab66
Added Subscription for Rooms
rohit-quest1 Nov 12, 2025
b3ba4c3
Modified the Edit/delete logic and commented out subscription stuff
rohit-quest1 Nov 12, 2025
d1ebd4c
Code cleanup and edit message timestamp fix
yuvaraj-quest1 Nov 12, 2025
2806c50
PR comments addressed. removed all the any propery type definitions
yuvaraj-quest1 Nov 12, 2025
6b36139
removed zustand subscriber and added strict more in ditto config
yuvaraj-quest1 Nov 13, 2025
127c3f7
Added Subs Core Logic
rohit-quest1 Nov 13, 2025
6f5ec76
useMemo callback condition fix
yuvaraj-quest1 Nov 13, 2025
dfececa
Merge branch 'feature/web-rooms-chat' of https://github.com/getditto/…
rohit-quest1 Nov 13, 2025
990e488
Added Notification Logic for Subscribed Rooms & DMs
rohit-quest1 Nov 14, 2025
b5c25ea
Reaction picker feature added and dark theme css added
yuvaraj-quest1 Nov 14, 2025
2df09fc
user mentions feature added
yuvaraj-quest1 Nov 17, 2025
b3e253c
mention badge and notifications added
yuvaraj-quest1 Nov 17, 2025
f9fa565
Merge branch 'main' into feature/web-chat-milestone2
yuvaraj-quest1 Nov 18, 2025
0896f55
Added Test Suite for DittoChatCore Hooks
rohit-quest1 Nov 18, 2025
fd401b9
chat list loadin skeleton added & chat input action cmd + enter send …
yuvaraj-quest1 Nov 18, 2025
1bac5b8
chat list loadin skeleton added & chat input action cmd + enter send …
yuvaraj-quest1 Nov 18, 2025
ee62de6
Added Retention Days Logic
rohit-quest1 Nov 18, 2025
a92834f
Merge branch 'feature/web-chat-milestone2' of https://github.com/getd…
rohit-quest1 Nov 18, 2025
02ea9aa
setup theme as props
yuvaraj-quest1 Nov 18, 2025
2281e08
auto theme pref added and fav icon changed
yuvaraj-quest1 Nov 19, 2025
e3377cf
Sub Btn & Unread Badge Fix
rohit-quest1 Nov 19, 2025
e505169
Added Tests for DittoChatUI
rohit-quest1 Nov 20, 2025
a2e2da8
Sub Btn Fix
rohit-quest1 Nov 20, 2025
a642307
ditto chat core test cases improved by 90%
yuvaraj-quest1 Nov 20, 2025
1d0dc73
Test Coverage Inc for DittoChatUI
rohit-quest1 Nov 21, 2025
682f098
Proper Typing for Tests/DittoChatCore
rohit-quest1 Nov 21, 2025
2d5b428
Fix/Typing in DittoChatCore Tests
rohit-quest1 Nov 21, 2025
0701480
Fix/Typing in DittoChatCore Tests
rohit-quest1 Nov 24, 2025
94f3005
Added Profile Picture Rendering
rohit-quest1 Nov 24, 2025
ceab2cc
Ditto chat UI coverage improved
yuvaraj-quest1 Nov 24, 2025
92c1c74
owasp validation and test cases validations added
yuvaraj-quest1 Nov 24, 2025
d8081fd
glob security issue fix
yuvaraj-quest1 Nov 24, 2025
65d3ce0
test cases pipeline fix
yuvaraj-quest1 Nov 24, 2025
a561bba
Regenerate package-lock.json with glob override
yuvaraj-quest1 Nov 24, 2025
2093e7a
ditto chat ui test case fix
yuvaraj-quest1 Nov 24, 2025
585b92f
Added Unsubscribe to Rooms Logic
rohit-quest1 Nov 25, 2025
8bc6ab1
Merge branch 'feature/web-chat-milestone2' of https://github.com/getd…
rohit-quest1 Nov 25, 2025
d1f7202
Added Profile Picture Rendering in Mentions
rohit-quest1 Nov 25, 2025
7834c95
RBCA config added and updated in the components
yuvaraj-quest1 Nov 26, 2025
59c960c
Added Browser Notifications and Modified Toasts as Fallback
rohit-quest1 Nov 26, 2025
7cdbd28
Minor UI Fixes
rohit-quest1 Nov 26, 2025
200f28b
Profile Picture Bug Fix
rohit-quest1 Nov 27, 2025
9b5820e
Fixed Re-Render of Image Attachments
rohit-quest1 Nov 27, 2025
d2aea90
Minor Fixes
rohit-quest1 Nov 27, 2025
a88582c
Updating Main README
rohit-quest1 Dec 1, 2025
a03e2ae
Merge branch 'feature/web-chat-milestone2' into feature/web-chat-rbac
rohit-quest1 Dec 1, 2025
7d5d3f1
PR Comments Fix
rohit-quest1 Dec 2, 2025
be5b2bc
pr comments update on the github actions
yuvaraj-quest1 Dec 3, 2025
36db87e
surppress the coco pod check on node js
yuvaraj-quest1 Dec 3, 2025
3d560a3
vulnerabilities comments update fix
yuvaraj-quest1 Dec 3, 2025
40ca3cc
vulnerabilities comments update fix
yuvaraj-quest1 Dec 3, 2025
a7a02fa
esbuild vulnerbility fix in ditto chat core
yuvaraj-quest1 Dec 3, 2025
33038ef
Updated README
rohit-quest1 Dec 3, 2025
47daa96
Merge branch 'feature/web-chat-milestone2' of https://github.com/getd…
rohit-quest1 Dec 3, 2025
6f9a316
Fixed Linting Errors
rohit-quest1 Dec 3, 2025
6996799
message Optimistic update documented and rbac config documented in th…
yuvaraj-quest1 Dec 4, 2025
2c1fcf7
Replaced Custom Toast with Sonner Toasts
rohit-quest1 Dec 4, 2025
7f8e6e3
Merge branch 'feature/web-chat-milestone2' of https://github.com/getd…
rohit-quest1 Dec 4, 2025
7e1733f
Type Error Fix
rohit-quest1 Dec 4, 2025
067d446
WIP: Headless Toast
rohit-quest1 Dec 4, 2025
44e3fb9
Added Sonner Toasts and Also Fixed Types
rohit-quest1 Dec 4, 2025
76124e6
Sonner Toaster added and updated ReadMe
yuvaraj-quest1 Dec 4, 2025
fcdcc74
package lock updated
yuvaraj-quest1 Dec 4, 2025
4817edd
Readme updated
yuvaraj-quest1 Dec 4, 2025
e06ccf5
Removed Debug Block
rohit-quest1 Dec 5, 2025
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
206 changes: 206 additions & 0 deletions .github/workflows/owasp-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
name: OWASP Dependency Check

on:
pull_request:
branches: [main]

permissions:
contents: read
pull-requests: write
issues: write
security-events: write

jobs:
dependency-check:
runs-on: ubuntu-latest

strategy:
matrix:
# Add your specific project paths here
project:
- "sdks/js/DittoChatCore"
- "sdks/js/DittoChatUI"
fail-fast: false

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "24"
cache: "npm"
cache-dependency-path: "${{ matrix.project }}/package-lock.json"

- name: Install dependencies for ${{ matrix.project }}
working-directory: ${{ matrix.project }}
run: npm ci

- name: Create suppression file
run: |
cat > suppression.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<suppressions xmlns="https://jeremylong.github.io/DependencyCheck/dependency-suppression.1.3.xsd">
<!-- Suppress non-Node.js files: binaries, CocoaPods, Gradle, Xcode -->
<suppress>
<filePath regex="true">.*((node_modules.*\.(dll|exe|so|dylib|msi))|\.podspec|/Podfile(\.lock)?|/Pods/.*|\.gradle|/gradlew(\.bat)?|\.(xcodeproj|xcworkspace)/.*)$</filePath>
<cpe regex="true">.*</cpe>
</suppress>
</suppressions>
EOF

- name: Run OWASP Dependency-Check
uses: dependency-check/Dependency-Check_Action@main
id: depcheck
with:
project: "${{ matrix.project }}"
path: "${{ matrix.project }}"
format: "ALL"
args: >
-s "${{ matrix.project }}/package.json"
-s "${{ matrix.project }}/package-lock.json"
--enableExperimental
--suppression suppression.xml
--failOnCVSS 7

- name: Upload Dependency-Check Report
uses: actions/upload-artifact@v4
if: always()
with:
name: dependency-check-report-${{ hashFiles(format('{0}/package.json', matrix.project)) }}
path: reports/
retention-days: 15

- name: Generate Vulnerability Summary
if: always()
id: summary
run: |
PROJECT="${{ matrix.project }}"
REPORT_FILE="reports/dependency-check-report.json"

if [ -f "$REPORT_FILE" ]; then
# Extract vulnerability counts (handle both uppercase and lowercase severity values)
CRITICAL=$(jq '[.dependencies[].vulnerabilities[]? | select(.severity == "CRITICAL" or .severity == "critical")] | length' "$REPORT_FILE")
HIGH=$(jq '[.dependencies[].vulnerabilities[]? | select(.severity == "HIGH" or .severity == "high")] | length' "$REPORT_FILE")
MEDIUM=$(jq '[.dependencies[].vulnerabilities[]? | select(.severity == "MEDIUM" or .severity == "moderate")] | length' "$REPORT_FILE")
LOW=$(jq '[.dependencies[].vulnerabilities[]? | select(.severity == "LOW" or .severity == "low")] | length' "$REPORT_FILE")
TOTAL=$(jq '[.dependencies[].vulnerabilities[]?] | length' "$REPORT_FILE")

echo "critical=$CRITICAL" >> $GITHUB_OUTPUT
echo "high=$HIGH" >> $GITHUB_OUTPUT
echo "medium=$MEDIUM" >> $GITHUB_OUTPUT
echo "low=$LOW" >> $GITHUB_OUTPUT
echo "total=$TOTAL" >> $GITHUB_OUTPUT

# Extract detailed vulnerabilities
echo "VULNERABILITIES<<EOF" >> $GITHUB_OUTPUT
jq -r '.dependencies[] | select(.vulnerabilities) | .fileName as $file | .vulnerabilities[] | "- **\(.name)** (\(.severity)) in `\($file)`\n - Description: \(.description // "N/A" | gsub("[`\\n\\r\"$]"; " "))\n - CVSS: \(.cvssv3.baseScore // .cvssv2.score // "N/A")\n"' "$REPORT_FILE" | head -n 50 >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
else
echo "critical=0" >> $GITHUB_OUTPUT
echo "high=0" >> $GITHUB_OUTPUT
echo "medium=0" >> $GITHUB_OUTPUT
echo "low=0" >> $GITHUB_OUTPUT
echo "total=0" >> $GITHUB_OUTPUT
echo "VULNERABILITIES=No vulnerabilities found" >> $GITHUB_OUTPUT
fi

- name: Comment PR with Detailed Results
if: always()
uses: actions/github-script@v7
env:
VULN_DATA: ${{ steps.summary.outputs.VULNERABILITIES }}
with:
script: |
const project = '${{ matrix.project }}';
const critical = '${{ steps.summary.outputs.critical }}';
const high = '${{ steps.summary.outputs.high }}';
const medium = '${{ steps.summary.outputs.medium }}';
const low = '${{ steps.summary.outputs.low }}';
const total = '${{ steps.summary.outputs.total }}';
const vulnerabilities = process.env.VULN_DATA;

// Determine status emoji and message
let statusEmoji = '✅';
let statusMessage = 'No vulnerabilities found';

if (parseInt(critical) > 0 || parseInt(high) > 0) {
statusEmoji = '🚨';
statusMessage = 'Critical or High severity vulnerabilities detected!';
} else if (parseInt(medium) > 0) {
statusEmoji = '⚠️';
statusMessage = 'Medium severity vulnerabilities detected';
} else if (parseInt(low) > 0) {
statusEmoji = 'ℹ️';
statusMessage = 'Low severity vulnerabilities detected';
}

const body = `## ${statusEmoji} OWASP Dependency Check - \`${project}\`

### ${statusMessage}

| Severity | Count |
|----------|------:|
| 🔴 Critical | **${critical}** |
| 🟠 High | **${high}** |
| 🟡 Medium | **${medium}** |
| 🔵 Low | **${low}** |
| **Total** | **${total}** |

${parseInt(total) > 0 ? `
### 📋 Vulnerability Details

${vulnerabilities}

${parseInt(total) > 50 ? '_Note: Showing first 50 vulnerabilities. Check the full report for complete details._' : ''}
` : ''}

---

📊 **[View Full HTML Report](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})**

<details>
<summary>ℹ️ How to fix vulnerabilities</summary>

1. Update vulnerable dependencies to patched versions
2. Run \`npm audit fix\` or \`npm audit fix --force\`
3. Check for alternative packages if updates aren't available
4. Review and update your \`package.json\` and \`package-lock.json\`

</details>
`;

// Find existing comment
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});

const botComment = comments.find(comment =>
comment.user.type === 'Bot' &&
comment.body.includes(`OWASP Dependency Check - \`${project}\``)
);

// Update or create comment
if (botComment) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: body
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: body
});
}

// Fail the job if critical or high vulnerabilities found
if (parseInt(critical) > 0 || parseInt(high) > 0) {
core.setFailed(`Found ${critical} critical and ${high} high severity vulnerabilities in ${project}`);
}
Loading