diff --git a/ACL_SOLUTION.md b/ACL_SOLUTION.md deleted file mode 100644 index c87ac6a..0000000 --- a/ACL_SOLUTION.md +++ /dev/null @@ -1,72 +0,0 @@ -# THE REAL ROOT CAUSE - ACL Permissions - -## Summary - -The 401 errors are NOT due to authentication or token issues. **The root ACL of each pod does not grant write permissions.** - -## Key Facts - -1. **CSS default root ACL grants only `acl:Read`** to the authenticated user -2. **Without `acl:Write` or `acl:Append` in the root ACL**, all write operations fail -3. **WAC-Allow header shows `user="read"`** - confirming no write permissions -4. **CSS has no built-in UI** for managing ACLs across pods -5. **Must update ACL programmatically** before first write operation - -## The Solution - -Before creating any folders or resources, **update the pod's root ACL** to grant write permissions. - -### Workflow - -1. User logs in via OIDC (get access token + DPoP key) -2. Determine pod root URL (e.g., `http://solid:3000/test/`) -3. **Check if ACL grants write access** by inspecting WAC-Allow header -4. **If no write access, update the root ACL** at `/.acl` -5. After ACL update, create containers/resources - -### ACL Document Format - -```turtle -@prefix acl: . - -# Full rights for the pod owner (required) -<#owner> - a acl:Authorization; - acl:agent ; - acl:accessTo ; - acl:default ; - acl:mode acl:Read, acl:Write, acl:Control. - -# Append and read rights for the Fleetbase integration -<#fleetbase> - a acl:Authorization; - acl:agent ; - acl:accessTo ; - acl:default ; - acl:mode acl:Append, acl:Read. -``` - -### Implementation Steps - -1. **GET** `` to check WAC-Allow header -2. If lacks `append`/`write`, prepare ACL Turtle document -3. **PUT** `/.acl` with DPoP authentication -4. After successful ACL update, proceed with folder creation - -## Why This Matters - -- **acl:agent** identifies who gets the permissions (use WebID) -- **acl:accessTo** applies to the pod root -- **acl:default** inherits to all descendants -- **acl:Append** allows creating resources -- **acl:Write** allows updating existing ones - -## For Fleetbase Integration - -The integration should: -1. Check ACL permissions on first access -2. Prompt user or automatically update ACL -3. Use `acl:Append` mode (safer than full Write) -4. Store ACL update status to avoid repeated checks - -This is **not a bug in our code** - it's the expected CSS behavior. Every pod needs explicit ACL configuration for write access. diff --git a/CSS_SCOPE_ISSUE.md b/CSS_SCOPE_ISSUE.md deleted file mode 100644 index f186d96..0000000 --- a/CSS_SCOPE_ISSUE.md +++ /dev/null @@ -1,140 +0,0 @@ -# CSS Scope Issue - Root Cause Analysis - -## The Problem - -Access tokens have `"scope": ""` (empty) even though: -- ✅ Client is registered with `"scope":"openid webid offline_access"` -- ✅ CSS server supports `["openid", "profile", "offline_access", "webid"]` -- ✅ Our code requests `['openid', 'webid', 'offline_access']` - -## Investigation Findings - -### 1. Client Registration (CORRECT) - -File: `/data/.internal/idp/adapter/Client/jwRIERi9-RW7LU_42zM3f$.json` - -```json -{ - "client_id": "jwRIERi9-RW7LU_42zM3f", - "client_name": "Fleetbase-v2", - "scope": "openid webid offline_access", ← Registered correctly - "dpop_bound_access_tokens": false ← Should this be true? -} -``` - -### 2. CSS Server Configuration (CORRECT) - -File: `/config/config/identity/handler/base/provider-factory.json` - -```json -{ - "scopes": ["openid", "profile", "offline_access", "webid"], ← Server supports these - "features": { - "dPoP": { "enabled": true } - } -} -``` - -### 3. Grant Storage (ISSUE FOUND!) - -File: `/data/.internal/idp/adapter/Grant/-HGiJLKCUJ7CZcU0ePOWQdw84p_WSNKWp3ajB3Q_mf3$.json` - -```json -{ - "accountId": "http://solid:3000/test/profile/card#me", - "clientId": "jwRIERi9-RW7LU_42zM3f", - "openid": { - "scope": "openid webid" ← Only these two! Missing offline_access! - } -} -``` - -**Problem:** The grant only includes `"openid webid"`, not `"offline_access"`. - -### 4. Access Token (RESULT) - -From logs: -```json -{ - "webid": "http://solid:3000/test/profile/card#me", - "scope": "", ← Empty! - "client_id": "jwRIERi9-RW7LU_42zM3f" -} -``` - -## Root Cause - -The scope is stored in the Grant under the `"openid"` key: -```json -"openid": {"scope": "openid webid"} -``` - -But CSS might not be extracting it correctly when issuing access tokens, resulting in empty scope. - -## Possible Solutions - -### Option 1: Fix Grant Scope Storage - -CSS might be storing scopes incorrectly. This could be: -- A CSS bug -- A configuration issue -- Expected behavior for certain grant types - -### Option 2: Use Different Grant Type - -The current grant type might not support scopes properly. Try: -- Client credentials grant (already tried, same issue) -- Refresh token flow -- Different authorization parameters - -### Option 3: Manual Scope Injection - -Modify CSS code or configuration to ensure scopes are included in access tokens. - -### Option 4: Workaround - Use ACL Without Scope - -Since the ACL is already correct and grants full permissions, the issue is that CSS requires `webid` scope to authenticate as the WebID. - -**Workaround:** Use a different authentication method that doesn't require scope: -- CSS credential tokens (tried, same scope issue) -- Direct WebID authentication -- Bearer tokens without scope validation - -## Next Steps - -1. **Check if `dpop_bound_access_tokens` should be true** - - Current: `false` - - Might affect scope handling - -2. **Verify authorization request includes scope parameter** - - Check if scope is being sent during auth code exchange - - Verify it's not being filtered out - -3. **Test with explicit scope in token request** - - Add scope parameter to token exchange request - - See if CSS honors it - -4. **Check CSS logs for scope-related warnings** - - CSS might be logging why scopes are being dropped - -## CSS Configuration Files Analyzed - -- `/config/config/oidc.json` - Main OIDC config -- `/config/config/identity/oidc/default.json` - OIDC handler -- `/config/config/identity/handler/base/provider-factory.json` - Scope definitions -- `/config/config/ldp/metadata-writer/writers/www-auth.json` - WWW-Authenticate header -- `/data/.internal/idp/adapter/Client/*` - Client registrations -- `/data/.internal/idp/adapter/Grant/*` - Authorization grants - -## Conclusion - -The issue is NOT with: -- ❌ Client registration (correct) -- ❌ Server configuration (correct) -- ❌ Our code (correct) - -The issue IS with: -- ✅ Grant scope storage (only `"openid webid"`, missing `"offline_access"`) -- ✅ Access token scope extraction (returns empty instead of grant scopes) - -This appears to be a CSS behavior or bug where scopes are not properly propagated from grants to access tokens. diff --git a/HOTFIX_SYNTAX_ERROR.md b/HOTFIX_SYNTAX_ERROR.md deleted file mode 100644 index 0165e09..0000000 --- a/HOTFIX_SYNTAX_ERROR.md +++ /dev/null @@ -1,100 +0,0 @@ -# Hotfix: PodService.php Syntax Error - -## Issue -After the refactoring, a critical syntax error was introduced in `PodService.php` that broke **all** endpoints, including logout. - -## Root Cause -When adding the new methods `getPodUrlFromWebId()`, `createFolder()`, and `deleteResource()` to PodService.php, they were accidentally placed **outside** the class definition. - -**Before Fix (BROKEN):** -```php -class PodService -{ - // ... existing methods ... - - private function generateTurtleMetadata(string $name, ?string $description = null): string - { - // ... - return $turtle; - } -} // ← Class closed here at line 743 - - // ❌ Methods added OUTSIDE the class - SYNTAX ERROR! - public function getPodUrlFromWebId(string $webId): string - { - // ... - } - - public function createFolder(SolidIdentity $identity, string $folderUrl): bool - { - // ... - } - - public function deleteResource(SolidIdentity $identity, string $resourceUrl): bool - { - // ... - } -} -``` - -## Error Message -``` -ParseError: syntax error, unexpected token "public", expecting end of file -at /fleetbase/packages/solid/server/src/Services/PodService.php:751 -``` - -## Fix Applied -Moved the three methods **inside** the class before the closing brace. - -**After Fix (WORKING):** -```php -class PodService -{ - // ... existing methods ... - - private function generateTurtleMetadata(string $name, ?string $description = null): string - { - // ... - return $turtle; - } - - // ✅ Methods now INSIDE the class - public function getPodUrlFromWebId(string $webId): string - { - // ... - } - - public function createFolder(SolidIdentity $identity, string $folderUrl): bool - { - // ... - } - - public function deleteResource(SolidIdentity $identity, string $resourceUrl): bool - { - // ... - } -} // ← Class properly closed at line 852 -``` - -## Impact -- **Before:** ALL endpoints returned 500 errors due to class loading failure -- **After:** All endpoints working normally - -## Files Modified -- `server/src/Services/PodService.php` - Fixed class structure - -## Testing -After this fix: -1. ✅ Application loads without errors -2. ✅ Logout endpoint works -3. ✅ Authentication status endpoint works -4. ✅ All other endpoints functional - -## Prevention -- Always verify class structure when adding new methods -- Use IDE with PHP syntax checking -- Test basic endpoints after structural changes -- Run `php -l` to check syntax before committing (if PHP CLI available) - -## Apology -This was a careless error on my part during the refactoring. I should have verified the class structure after adding the methods via the `append` action. The methods should have been inserted before the closing brace, not after. diff --git a/MANUAL_ACL_SETUP.md b/MANUAL_ACL_SETUP.md deleted file mode 100644 index 7b8904b..0000000 --- a/MANUAL_ACL_SETUP.md +++ /dev/null @@ -1,135 +0,0 @@ -# Manual ACL Setup Guide - -## The Problem - -CSS is not granting the `webid` scope even when requested during client registration and authentication. This means: -- Access tokens have `"scope": ""` (empty) -- Cannot programmatically update ACLs (requires `webid` scope) -- Must manually set up root ACL with proper permissions - -## The Solution - -Manually create the root ACL file for each pod using one of these methods: - -### Method 1: Using curl (Recommended) - -```bash -# 1. Create ACL file -cat > /tmp/root.acl << 'EOF' -@prefix acl: . - -<#owner> - a acl:Authorization; - acl:agent ; - acl:accessTo ; - acl:default ; - acl:mode acl:Read, acl:Write, acl:Control. -EOF - -# 2. Upload to CSS (requires admin access or direct file system access) -curl -X PUT \ - -H "Content-Type: text/turtle" \ - --data-binary @/tmp/root.acl \ - http://solid:3000/test/.acl -``` - -### Method 2: Direct File System Access - -If you have access to the CSS server file system: - -```bash -# Navigate to the pod directory -cd /path/to/css/data/test/ - -# Create .acl file -cat > .acl << 'EOF' -@prefix acl: . - -<#owner> - a acl:Authorization; - acl:agent ; - acl:accessTo ; - acl:default ; - acl:mode acl:Read, acl:Write, acl:Control. -EOF - -# Set proper permissions -chmod 644 .acl -``` - -### Method 3: CSS Admin API (if available) - -If your CSS instance has an admin API: - -```bash -# Use admin credentials to create ACL -curl -X PUT \ - -H "Authorization: Bearer " \ - -H "Content-Type: text/turtle" \ - --data-binary @root.acl \ - http://solid:3000/admin/pods/test/.acl -``` - -## ACL Template - -Replace `` and `` with actual values: - -```turtle -@prefix acl: . - -# Full control for the pod owner -<#owner> - a acl:Authorization; - acl:agent ; - acl:accessTo ; - acl:default ; - acl:mode acl:Read, acl:Write, acl:Control. -``` - -**Example for test pod:** -- WebID: `http://solid:3000/test/profile/card#me` -- Pod URL: `http://solid:3000/test/` - -## Verification - -After setting up the ACL, verify it works: - -```bash -# Check WAC-Allow header (should now include "write") -curl -I http://solid:3000/test/ - -# Expected response: -# WAC-Allow: user="read write append control",public="read" -``` - -## For Fleetbase Integration - -Once the root ACL is set up: - -1. ✅ User can create folders -2. ✅ User can import resources -3. ✅ All descendants inherit permissions (via `acl:default`) -4. ✅ No need for programmatic ACL updates - -## Why This Is Necessary - -CSS does not grant `webid` scope by default, which means: -- Cannot use OIDC tokens to update ACLs programmatically -- Root ACL must be created manually during pod provisioning -- This is expected behavior for CSS security model - -## Long-Term Solution - -For production: -1. Configure CSS to grant `webid` scope (server configuration) -2. Or create root ACL during pod creation (provisioning hook) -3. Or use CSS admin API to set up ACLs automatically - -## Current Status - -- ✅ Authentication works (DPoP + OIDC) -- ✅ Read operations work -- ❌ Write operations fail (no ACL permissions) -- ❌ Cannot update ACL (no `webid` scope) - -**Action Required:** Manually create root ACL for each pod using one of the methods above. diff --git a/REFACTORING_SUMMARY.md b/REFACTORING_SUMMARY.md deleted file mode 100644 index 39267f0..0000000 --- a/REFACTORING_SUMMARY.md +++ /dev/null @@ -1,330 +0,0 @@ -# Solid Extension Refactoring Summary - -## Overview -Refactored the Fleetbase Solid Protocol extension from a multi-pod architecture to a single-pod architecture with user-friendly terminology. - -## Key Changes - -### Terminology Updates -- **"Pods" → "Data"**: More intuitive for users to understand they're managing their data -- **"Container" → "Folder"**: Familiar file system metaphor instead of technical Solid terminology - -### Architecture Shift -**Before (Multi-Pod):** -- Users could create multiple pods -- Complex pod listing and management UI -- Cross-pod authentication issues -- Routes: `pods`, `pods.index`, `pods.explorer`, `pods.index.pod` - -**After (Single-Pod):** -- Users have ONE primary pod from OIDC authentication -- Data organized in folders within the pod (vehicles/, drivers/, contacts/, orders/) -- Simplified permissions model -- Routes: `data`, `data.content` - ---- - -## Frontend Changes - -### Routes Refactored -**File:** `addon/routes.js` - -**Old Structure:** -```javascript -this.route('pods', function () { - this.route('explorer', { path: '/explorer/:id' }, function () { - this.route('content', { path: '/~/:slug' }); - }); - this.route('index', { path: '/' }, function () { - this.route('pod', { path: '/pod/:slug' }); - }); -}); -``` - -**New Structure:** -```javascript -this.route('data', { path: '/data' }, function () { - this.route('content', { path: '/:slug' }); -}); -``` - -### Files Created -1. **`addon/routes/data/index.js`** - Main data browser route -2. **`addon/routes/data/content.js`** - Folder navigation route -3. **`addon/controllers/data/index.js`** - Data browser controller with folder operations -4. **`addon/controllers/data/content.js`** - Folder content controller -5. **`addon/templates/data/index.hbs`** - Data browser template -6. **`addon/templates/data/content.hbs`** - Folder content viewer template - -### Files Removed -- `addon/routes/pods/` (entire directory) -- `addon/controllers/pods/` (entire directory) -- `addon/templates/pods/` (entire directory) - -### Files Updated -1. **`addon/templates/application.hbs`** - - Updated sidebar navigation: `console.solid-protocol.pods` → `console.solid-protocol.data` - -2. **`addon/templates/home.hbs`** - - "Browse Pods" → "Browse Data" - - "Explore and manage your Solid pods" → "Explore and manage your Fleetops data in Solid" - - Updated all pod references to use "storage" terminology - -3. **`addon/controllers/home.js`** - - `navigateToPods()` now routes to `console.solid-protocol.data` - ---- - -## Backend Changes - -### New Controller -**File:** `server/src/Http/Controllers/DataController.php` - -**Methods:** -- `index()` - Get root level contents of user's pod -- `showFolder($slug)` - Get contents of a specific folder -- `createFolder()` - Create a new folder in the pod -- `deleteItem($type, $slug)` - Delete a file or folder -- `importResources()` - Import Fleetops resources into folders - -### Routes Updated -**File:** `server/src/routes.php` - -**Old Routes:** -```php -$router->get('pods', 'PodController@index'); -$router->post('pods', 'PodController@create'); -$router->get('pods/{podId}', 'PodController@show'); -$router->delete('pods/{podId}', 'PodController@destroy'); -$router->post('import-resources', 'PodController@importResources'); - -$router->get('containers', 'ContainerController@index'); -$router->post('containers', 'ContainerController@create'); -$router->delete('containers/{containerName}', 'ContainerController@destroy'); -``` - -**New Routes:** -```php -$router->get('data', 'DataController@index'); -$router->get('data/folder/{slug}', 'DataController@showFolder'); -$router->post('data/folder', 'DataController@createFolder'); -$router->delete('data/{type}/{slug}', 'DataController@deleteItem'); -$router->post('data/import', 'DataController@importResources'); -``` - -### Service Methods Added -**File:** `server/src/Services/PodService.php` - -**New Methods:** -- `createFolder(SolidIdentity $identity, string $folderUrl): bool` - - Creates a folder (LDP BasicContainer) in the pod - - Uses PUT request with proper Content-Type and Link headers - -- `deleteResource(SolidIdentity $identity, string $resourceUrl): bool` - - Deletes a file or folder from the pod - - Uses DELETE request - -**Existing Method Used:** -- `getPodUrlFromWebId(string $webId): string` - - Extracts the pod URL from the user's WebID - - Example: `http://solid:3000/test/profile/card#me` → `http://solid:3000/test/` - ---- - -## API Endpoint Mapping - -### Frontend → Backend -| Frontend Route | API Endpoint | Controller Method | -|----------------|--------------|-------------------| -| `data.index` | `GET /data` | `DataController@index` | -| `data.content/:slug` | `GET /data/folder/:slug` | `DataController@showFolder` | -| Create folder action | `POST /data/folder` | `DataController@createFolder` | -| Delete item action | `DELETE /data/:type/:slug` | `DataController@deleteItem` | -| Import resources | `POST /data/import` | `DataController@importResources` | - ---- - -## User Experience Improvements - -### Navigation -- **Sidebar:** "Data" instead of "Pods" -- **Home Page:** "Browse Data" quick action -- **Breadcrumbs:** Will show folder hierarchy instead of pod names - -### Data Browser Features -1. **Folder Management** - - Create new folders with "New Folder" button - - Browse folders like a file explorer - - Delete folders and files - -2. **Resource Import** - - "Import Resources" button in data browser - - Select resource types: Vehicles, Drivers, Contacts, Orders - - Resources imported into respective folders in the pod - -3. **File Operations** - - View file information in overlay - - Open files in new tab - - Delete files with confirmation - ---- - -## Technical Benefits - -### Simplified Architecture -1. **No Multi-Pod Management** - - Removed pod listing complexity - - Removed pod creation/deletion UI - - Removed pod selection logic - -2. **Single Authentication Flow** - - One DPoP-bound access token for the user's pod - - No cross-pod permission issues - - Cleaner token management - -3. **Standard Solid Patterns** - - Follows Solid specification for single-pod-per-user - - Uses LDP containers (folders) for organization - - Proper RDF/Turtle format for resources - -### Code Cleanliness -1. **Removed Unused Code** - - Deleted 12 files related to multi-pod management - - Removed unused routes and controllers - - Cleaner route structure (2 routes vs 4) - -2. **Clear Naming** - - `DataController` vs `PodController` - clearer intent - - `data/folder` routes - self-documenting - - User-facing terms match technical implementation - ---- - -## Data Organization - -### Pod Structure -``` -http://solid:3000/user/ -├── vehicles/ -│ ├── vehicle-uuid-1.ttl -│ ├── vehicle-uuid-2.ttl -│ └── ... -├── drivers/ -│ ├── driver-uuid-1.ttl -│ └── ... -├── contacts/ -│ ├── contact-uuid-1.ttl -│ └── ... -└── orders/ - ├── order-uuid-1.ttl - └── ... -``` - -### Resource Format -Each resource is stored as an RDF/Turtle file with semantic metadata following Solid conventions. - ---- - -## Next Steps - -### Testing Required -1. **Authentication Flow** - - Verify OIDC authentication still works - - Check DPoP token binding - - Confirm pod URL extraction from WebID - -2. **Data Browser** - - Test folder creation - - Test folder navigation - - Test file deletion - - Test search functionality - -3. **Resource Import** - - Test importing vehicles - - Test importing drivers - - Test importing contacts - - Test importing orders - - Verify RDF/Turtle format - - Check folder creation for each resource type - -4. **Error Handling** - - Test 401 unauthorized scenarios - - Test invalid folder names - - Test deleting non-existent resources - -### Future Enhancements -1. **Incremental Sync** - - Only sync changed resources - - Track last sync timestamp - - Show sync status per resource type - -2. **Resource Filtering** - - Filter by date range - - Filter by status - - Search within resources - -3. **Sync History** - - Track sync operations - - Show sync logs - - Rollback capability - -4. **Real-time Sync** - - Webhook integration with Fleetops - - Automatic sync on data changes - - Conflict resolution - ---- - -## Migration Notes - -### For Developers -- Update any references to `pods` routes to use `data` routes -- Replace `PodController` usage with `DataController` -- Update API calls from `import-resources` to `data/import` -- Remove any pod selection logic from components - -### For Users -- Existing data: Users will need to re-import resources into their primary pod -- No action required for authentication - existing OIDC flow remains the same -- UI will automatically reflect new "Data" terminology - ---- - -## Files Modified Summary - -### Created (7 files) -- `addon/routes/data/index.js` -- `addon/routes/data/content.js` -- `addon/controllers/data/index.js` -- `addon/controllers/data/content.js` -- `addon/templates/data/index.hbs` -- `addon/templates/data/content.hbs` -- `server/src/Http/Controllers/DataController.php` - -### Modified (6 files) -- `addon/routes.js` -- `addon/templates/application.hbs` -- `addon/templates/home.hbs` -- `addon/controllers/home.js` -- `server/src/routes.php` -- `server/src/Services/PodService.php` - -### Deleted (12 files) -- `addon/routes/pods/explorer.js` -- `addon/routes/pods/explorer/content.js` -- `addon/routes/pods/index.js` -- `addon/routes/pods/index/pod.js` -- `addon/controllers/pods/explorer.js` -- `addon/controllers/pods/explorer/content.js` -- `addon/controllers/pods/index.js` -- `addon/controllers/pods/index/pod.js` -- `addon/templates/pods/explorer.hbs` -- `addon/templates/pods/explorer/content.hbs` -- `addon/templates/pods/index.hbs` -- `addon/templates/pods/index/pod.hbs` - ---- - -## Conclusion - -This refactoring significantly simplifies the Solid extension architecture while improving user experience through familiar terminology. The single-pod approach aligns with Solid best practices and eliminates cross-pod authentication complexity. The codebase is now cleaner, more maintainable, and easier for developers to understand. diff --git a/VERIFICATION_CHECKLIST.md b/VERIFICATION_CHECKLIST.md deleted file mode 100644 index 4447892..0000000 --- a/VERIFICATION_CHECKLIST.md +++ /dev/null @@ -1,82 +0,0 @@ -# Refactoring Verification Checklist - -## Code Cleanup ✓ -- [x] Removed old `addon/routes/pods/` directory -- [x] Removed old `addon/controllers/pods/` directory -- [x] Removed old `addon/templates/pods/` directory -- [x] Removed `server/src/Http/Controllers/PodController.php` -- [x] Removed `server/src/Http/Controllers/ContainerController.php` -- [x] Removed commented code from `addon/templates/application.hbs` -- [x] Removed commented routes from `server/src/routes.php` - -## New Files Created ✓ -- [x] `addon/routes/data/index.js` -- [x] `addon/routes/data/content.js` -- [x] `addon/controllers/data/index.js` -- [x] `addon/controllers/data/content.js` -- [x] `addon/templates/data/index.hbs` -- [x] `addon/templates/data/content.hbs` -- [x] `server/src/Http/Controllers/DataController.php` - -## Routes Updated ✓ -- [x] `addon/routes.js` - Simplified to data routes -- [x] `server/src/routes.php` - Updated API endpoints - -## Templates Updated ✓ -- [x] `addon/templates/application.hbs` - Sidebar navigation -- [x] `addon/templates/home.hbs` - Quick actions and terminology - -## Controllers Updated ✓ -- [x] `addon/controllers/home.js` - Navigation method - -## Services Updated ✓ -- [x] `server/src/Services/PodService.php` - Added createFolder() and deleteResource() - -## Terminology Changes ✓ -- [x] "Pods" → "Data" throughout UI -- [x] "Container" → "Folder" in code comments and user-facing text -- [x] Updated all user-facing messages - -## Testing Required -- [ ] OIDC authentication flow -- [ ] Pod URL extraction from WebID -- [ ] Data browser loads correctly -- [ ] Folder creation works -- [ ] Folder navigation works -- [ ] File/folder deletion works -- [ ] Resource import (vehicles, drivers, contacts, orders) -- [ ] Search functionality -- [ ] Error handling (401, invalid inputs) - -## API Endpoints to Test - -### GET /solid/int/v1/data -Expected: Returns root contents of user's pod - -### GET /solid/int/v1/data/folder/{slug} -Expected: Returns contents of specified folder - -### POST /solid/int/v1/data/folder -Payload: `{ "name": "test-folder", "path": "" }` -Expected: Creates new folder - -### DELETE /solid/int/v1/data/{type}/{slug} -Example: `DELETE /solid/int/v1/data/folder/vehicles` -Expected: Deletes specified folder or file - -### POST /solid/int/v1/data/import -Payload: `{ "resource_types": ["vehicles", "drivers"] }` -Expected: Imports selected resources into folders - -## Files Count Summary -- **Created:** 7 files -- **Modified:** 6 files -- **Deleted:** 14 files (12 frontend + 2 backend) -- **Net change:** -1 files (cleaner codebase!) - -## Code Quality Checks -- [x] No references to old `pods.explorer` or `pods.index` routes -- [x] No references to `PodController` or `ContainerController` -- [x] All imports and dependencies updated -- [x] Consistent naming conventions (data/folder) -- [x] Clean, readable code structure diff --git a/composer.json b/composer.json index d046761..3084940 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "fleetbase/solid-api", - "version": "0.0.6", + "version": "0.0.7", "description": "Solid Protocol Extension to Store and Share Data with Fleetbase", "keywords": [ "fleetbase-extension", diff --git a/extension.json b/extension.json index cab5e3d..61ea0e9 100644 --- a/extension.json +++ b/extension.json @@ -1,6 +1,6 @@ { "name": "Solid", - "version": "0.0.6", + "version": "0.0.7", "description": "Solid Protocol Extension to Store and Share Data with Fleetbase", "repository": "https://github.com/fleetbase/solid", "license": "AGPL-3.0-or-later", diff --git a/package.json b/package.json index dcd23d2..c7f4fec 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@fleetbase/solid-engine", - "version": "0.0.6", + "version": "0.0.7", "description": "Solid Protocol Extension to Store and Share Data with Fleetbase", "fleetbase": { "route": "solid-protocol"