Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
91f27a5
chore: Switch license to EUPL-1.2
rubenvdlinde Feb 26, 2026
f5c2113
fix: Revert licence to agpl for Nextcloud App Store compatibility
rubenvdlinde Mar 1, 2026
e5aede3
refactor: Move website/ to docusaurus/ pattern (docs/ at root)
rubenvdlinde Mar 3, 2026
f6d6109
feat: Add 3 tender-derived OpenSpecs for integration adapters
rubenvdlinde Mar 16, 2026
4564417
feat: Enrich 3 specs, add prometheus metrics
rubenvdlinde Mar 16, 2026
9f29ee3
feat: Add OpenRegister dependency check and enforce scoped CSS
rubenvdlinde Mar 18, 2026
cf673a3
feat: Add support contact info to app description and README
rubenvdlinde Mar 18, 2026
0967c14
feat: Standardize settings with CnVersionInfoCard, fix section icon
rubenvdlinde Mar 18, 2026
b050180
fix: Add @nextcloud/dialogs webpack alias to fix local dev build
rubenvdlinde Mar 18, 2026
3d5e39f
feat: Add i18n support — l10n imports, Composition API imports, backe…
rubenvdlinde Mar 18, 2026
bf91ce9
chore: Add l10n translation bundles
rubenvdlinde Mar 18, 2026
a09cc99
fix: Resolve PHPMD warnings — quick fixes + complexity suppression
rubenvdlinde Mar 19, 2026
f3d61b1
refactor: Replace else clauses with early returns — remove ElseExpres…
rubenvdlinde Mar 19, 2026
97968cf
Merge remote-tracking branch 'origin/development' into feature/opensp…
rubenvdlinde Mar 19, 2026
003c12a
config: Remove DisallowInlineIf PHPCS rule — allow ternaries for PHPM…
rubenvdlinde Mar 19, 2026
1d6a1c3
fix: Sync composer.lock and resolve ESLint violations
rubenvdlinde Mar 19, 2026
011d4e8
config: Restore DisallowInlineIf PHPCS rule — use early returns inste…
rubenvdlinde Mar 19, 2026
f4a04b5
fix: Regenerate composer.lock and resolve remaining ESLint issue
rubenvdlinde Mar 19, 2026
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
91 changes: 91 additions & 0 deletions .github/workflows/sbom.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: SBOM

on:
push:
branches: [main, development, feature/**, bugfix/**, hotfix/**]
pull_request:
branches: [main, development]

jobs:
sbom:
runs-on: ubuntu-latest
name: "SBOM Generation & Validation"

steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref || github.ref_name }}
token: ${{ secrets.GITHUB_TOKEN }}

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: "8.3"
extensions: mbstring, intl, zip, gd, curl, xml, json
tools: composer:v2

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Cache Composer dependencies
uses: actions/cache@v4
with:
path: vendor
key: ${{ runner.os }}-composer-${{ hashFiles('composer.lock') }}
restore-keys: ${{ runner.os }}-composer-

- name: Install Composer dependencies
run: composer install --no-progress --prefer-dist --optimize-autoloader

- name: Generate PHP SBOM
run: composer CycloneDX:make-sbom --output-format=JSON --output-file=bom-php.cdx.json --spec-version=1.5 --omit=dev --omit=plugin

- name: Install npm dependencies
run: npm ci

- name: Generate npm SBOM
run: npx @cyclonedx/cyclonedx-npm --output-file bom-npm.cdx.json --spec-version 1.5 --omit dev

- name: Merge PHP + npm SBOMs
run: |
jq -s '.[0] * {components: ([.[].components[]?] | unique_by(.purl // .name))}' bom-php.cdx.json bom-npm.cdx.json > sbom.cdx.json

- name: Install Grype
uses: anchore/scan-action/download-grype@v5

- name: CVE scan SBOM
run: grype sbom:sbom.cdx.json --fail-on critical

- name: Composer audit
run: composer audit --format=json || true

- name: npm audit
run: npm audit --audit-level=critical

- name: Commit SBOM
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add sbom.cdx.json
if git diff --cached --quiet; then
echo "No SBOM changes to commit"
else
git commit -m "chore: update SBOM"
git push
fi

- name: Upload SBOM artifact
uses: actions/upload-artifact@v4
with:
name: sbom-openconnector
path: sbom.cdx.json
retention-days: 90

- name: Attach SBOM to release
if: ${{ startsWith(github.ref, 'refs/tags/') }}
uses: softprops/action-gh-release@v2
with:
files: sbom.cdx.json
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,12 @@ npm run test # Jest unit tests
| Data | PostgreSQL, MySQL 8.0+, or SQLite |
| Quality | PHPCS, PHPMD, phpmetrics, Psalm, PHPStan, ESLint, Stylelint, Jest |

## Support

For support, contact us at [support@conduction.nl](mailto:support@conduction.nl).

For a Service Level Agreement (SLA), contact [sales@conduction.nl](mailto:sales@conduction.nl).

## Documentation

Full documentation is available at **[conductionnl.github.io/openconnector](https://conductionnl.github.io/openconnector/)**
Expand Down
1 change: 1 addition & 0 deletions appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ The OpenConnector Nextcloud app provides a ESB-framework to work together in an
- 📰 Send cloud events
- 🆓 Map and translate API calls

**Support:** For support, contact support@conduction.nl. For a Service Level Agreement (SLA), contact sales@conduction.nl.
]]></description>
<version>0.2.8</version>
<licence>agpl</licence>
Expand Down
7 changes: 7 additions & 0 deletions appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@
],
'routes' => [
['name' => 'dashboard#page', 'url' => '/', 'verb' => 'GET'],

// Metrics and health
['name' => 'metrics#index', 'url' => '/api/metrics', 'verb' => 'GET'],
['name' => 'health#index', 'url' => '/api/health', 'verb' => 'GET'],

['name' => 'dashboard#index', 'url' => '/api/dashboard', 'verb' => 'GET'],
['name' => 'dashboard#getCallStats', 'url' => '/api/dashboard/callstats', 'verb' => 'GET'],
['name' => 'dashboard#getJobStats', 'url' => '/api/dashboard/jobstats', 'verb' => 'GET'],
Expand Down Expand Up @@ -116,5 +121,7 @@
['name' => 'ui#cloudEventsEventsId', 'url' => '/cloud-events/events/{id}', 'verb' => 'GET'],
['name' => 'ui#cloudEventsLogs', 'url' => '/cloud-events/logs', 'verb' => 'GET'],
['name' => 'ui#import', 'url' => '/import', 'verb' => 'GET'],
// SPA catch-all — serves the Vue app for any frontend route (history mode routing)
['name' => 'dashboard#page', 'url' => '/{path}', 'verb' => 'GET', 'requirements' => ['path' => '.+'], 'defaults' => ['path' => '']],
],
];
3 changes: 3 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -95,12 +95,15 @@
"phpunit/phpunit": "^10.5",
"roave/security-advisories": "dev-latest",
"squizlabs/php_codesniffer": "^3.9",
"cyclonedx/cyclonedx-php-composer": "^6.2",
"vimeo/psalm": "^5.26"
},
"config": {
"allow-plugins": {
"bamarni/composer-bin-plugin": true,
"php-http/discovery": true,
"cyclonedx/cyclonedx-php-composer": true,
"phpro/grumphp": true,
"dealerdirect/phpcodesniffer-composer-installer": true
},
"optimize-autoloader": true,
Expand Down
Loading
Loading