More dev wiki

This commit is contained in:
2025-06-20 09:56:30 +02:00
parent e486b8a83d
commit 57aebb8c9e
8 changed files with 3174 additions and 0 deletions

View File

@@ -0,0 +1,554 @@
<div class="row">
<div class="col-lg-8">
<!-- API Overview -->
<div class="mb-5">
<h5 style="color: var(--primary-color);" class="mb-3">RESTful API Documentation</h5>
<p class="text-muted lead">
DocuPulse provides a comprehensive RESTful API with 50+ endpoints for file management, user collaboration,
and system administration. The API supports both web-based interactions and external integrations with
proper authentication and authorization controls.
</p>
</div>
<!-- Authentication -->
<div class="mb-5">
<h5 style="color: var(--primary-color);" class="mb-4">Authentication</h5>
<div class="row g-4">
<div class="col-md-6">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body">
<h6 style="color: var(--primary-color);" class="card-title mb-3">Web Authentication</h6>
<ul class="list-unstyled mb-0">
<li class="mb-2">• Flask-Login session-based</li>
<li class="mb-2">• CSRF token protection</li>
<li class="mb-2">• Secure cookie handling</li>
<li class="mb-2">• Automatic session timeout</li>
<li class="mb-2">• Remember me functionality</li>
<li class="mb-2">• Password reset tokens</li>
</ul>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body">
<h6 style="color: var(--primary-color);" class="card-title mb-3">API Authentication</h6>
<ul class="list-unstyled mb-0">
<li class="mb-2">• JWT token-based auth</li>
<li class="mb-2">• Management API keys</li>
<li class="mb-2">• Token expiration handling</li>
<li class="mb-2">• IP address tracking</li>
<li class="mb-2">• Rate limiting support</li>
<li class="mb-2">• Audit logging</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- Core API Endpoints -->
<div class="mb-5">
<h5 style="color: var(--primary-color);" class="mb-4">Core API Endpoints</h5>
<!-- Authentication Endpoints -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-user-shield me-2"></i>Authentication Endpoints
</h6>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-sm">
<thead>
<tr>
<th>Method</th>
<th>Endpoint</th>
<th>Description</th>
<th>Auth Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/auth/login</code></td>
<td>User login</td>
<td><span class="badge bg-secondary">No</span></td>
</tr>
<tr>
<td><span class="badge bg-danger">POST</span></td>
<td><code>/auth/logout</code></td>
<td>User logout</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/auth/register</code></td>
<td>User registration</td>
<td><span class="badge bg-secondary">No</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/auth/forgot-password</code></td>
<td>Password reset request</td>
<td><span class="badge bg-secondary">No</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/auth/reset-password</code></td>
<td>Password reset</td>
<td><span class="badge bg-secondary">No</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Room Management Endpoints -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-door-open me-2"></i>Room Management Endpoints
</h6>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-sm">
<thead>
<tr>
<th>Method</th>
<th>Endpoint</th>
<th>Description</th>
<th>Auth Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="badge bg-success">GET</span></td>
<td><code>/rooms</code></td>
<td>List user's rooms</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/rooms</code></td>
<td>Create new room</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-success">GET</span></td>
<td><code>/rooms/{id}</code></td>
<td>Get room details</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-warning">PUT</span></td>
<td><code>/rooms/{id}</code></td>
<td>Update room</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-danger">DELETE</span></td>
<td><code>/rooms/{id}</code></td>
<td>Delete room</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- File Management Endpoints -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-file-alt me-2"></i>File Management Endpoints
</h6>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-sm">
<thead>
<tr>
<th>Method</th>
<th>Endpoint</th>
<th>Description</th>
<th>Auth Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="badge bg-success">GET</span></td>
<td><code>/api/rooms/{room_id}/files</code></td>
<td>List room files</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/api/rooms/{room_id}/upload</code></td>
<td>Upload file</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-success">GET</span></td>
<td><code>/api/rooms/{room_id}/files/{file_id}</code></td>
<td>Download file</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-warning">PUT</span></td>
<td><code>/api/rooms/{room_id}/files/{file_id}</code></td>
<td>Update file</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-danger">DELETE</span></td>
<td><code>/api/rooms/{room_id}/files/{file_id}</code></td>
<td>Delete file</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/api/rooms/{room_id}/files/{file_id}/star</code></td>
<td>Star/unstar file</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Conversation Endpoints -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-comments me-2"></i>Conversation Endpoints
</h6>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-sm">
<thead>
<tr>
<th>Method</th>
<th>Endpoint</th>
<th>Description</th>
<th>Auth Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="badge bg-success">GET</span></td>
<td><code>/conversations</code></td>
<td>List conversations</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/conversations</code></td>
<td>Create conversation</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-success">GET</span></td>
<td><code>/conversations/{id}/messages</code></td>
<td>Get messages</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/conversations/{id}/messages</code></td>
<td>Send message</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/conversations/{id}/members</code></td>
<td>Add member</td>
<td><span class="badge bg-success">Yes</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Admin API Endpoints -->
<div class="mb-5">
<h5 style="color: var(--primary-color);" class="mb-4">Administrative API Endpoints</h5>
<!-- Management API -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-cogs me-2"></i>Management API Endpoints
</h6>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-sm">
<thead>
<tr>
<th>Method</th>
<th>Endpoint</th>
<th>Description</th>
<th>Auth Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="badge bg-success">GET</span></td>
<td><code>/api/admin/instances</code></td>
<td>List instances</td>
<td><span class="badge bg-success">Admin</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/api/admin/instances</code></td>
<td>Create instance</td>
<td><span class="badge bg-success">Admin</span></td>
</tr>
<tr>
<td><span class="badge bg-success">GET</span></td>
<td><code>/api/admin/events</code></td>
<td>Get system events</td>
<td><span class="badge bg-success">Admin</span></td>
</tr>
<tr>
<td><span class="badge bg-success">GET</span></td>
<td><code>/api/admin/users</code></td>
<td>List users</td>
<td><span class="badge bg-success">Admin</span></td>
</tr>
<tr>
<td><span class="badge bg-warning">PUT</span></td>
<td><code>/api/admin/settings</code></td>
<td>Update settings</td>
<td><span class="badge bg-success">Admin</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- Launch API -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-rocket me-2"></i>Launch API Endpoints
</h6>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-sm">
<thead>
<tr>
<th>Method</th>
<th>Endpoint</th>
<th>Description</th>
<th>Auth Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/api/admin/test-portainer</code></td>
<td>Test Portainer connection</td>
<td><span class="badge bg-secondary">No</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/api/admin/test-nginx</code></td>
<td>Test NGINX connection</td>
<td><span class="badge bg-secondary">No</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/api/admin/deploy-stack</code></td>
<td>Deploy Docker stack</td>
<td><span class="badge bg-success">Admin</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/api/admin/create-proxy</code></td>
<td>Create proxy host</td>
<td><span class="badge bg-success">Admin</span></td>
</tr>
<tr>
<td><span class="badge bg-primary">POST</span></td>
<td><code>/api/admin/create-ssl</code></td>
<td>Create SSL certificate</td>
<td><span class="badge bg-success">Admin</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<!-- Response Formats -->
<div class="mb-5">
<h5 style="color: var(--primary-color);" class="mb-4">Response Formats</h5>
<div class="row g-4">
<div class="col-md-6">
<div class="card border-0 shadow-sm">
<div class="card-body">
<h6 class="card-title text-muted mb-3">Success Response</h6>
<pre class="bg-light p-3 rounded small"><code>{
"success": true,
"data": {
"id": 1,
"name": "Example",
"created_at": "2024-01-01T00:00:00Z"
},
"message": "Operation successful"
}</code></pre>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card border-0 shadow-sm">
<div class="card-body">
<h6 class="card-title text-muted mb-3">Error Response</h6>
<pre class="bg-light p-3 rounded small"><code>{
"success": false,
"error": "Validation failed",
"details": {
"field": "name",
"message": "Name is required"
},
"status_code": 400
}</code></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Sidebar -->
<div class="col-lg-4">
<!-- API Statistics -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-body text-center">
<h5 class="card-title mb-4" style="color: var(--primary-color);">API Statistics</h5>
<div class="row g-3">
<div class="col-6">
<div class="p-3 rounded" style="background-color: var(--primary-opacity-15);">
<div class="h3 mb-1" style="color: var(--primary-color);">50+</div>
<small class="text-muted">Endpoints</small>
</div>
</div>
<div class="col-6">
<div class="p-3 rounded" style="background-color: var(--secondary-opacity-15);">
<div class="h3 mb-1" style="color: var(--secondary-color);">12</div>
<small class="text-muted">Modules</small>
</div>
</div>
<div class="col-6">
<div class="p-3 rounded" style="background-color: var(--primary-opacity-15);">
<div class="h3 mb-1" style="color: var(--primary-color);">4</div>
<small class="text-muted">Auth Types</small>
</div>
</div>
<div class="col-6">
<div class="p-3 rounded" style="background-color: var(--secondary-opacity-15);">
<div class="h3 mb-1" style="color: var(--secondary-color);">JSON</div>
<small class="text-muted">Data Format</small>
</div>
</div>
</div>
</div>
</div>
<!-- Authentication Methods -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-body">
<h5 class="card-title mb-3" style="color: var(--primary-color);">Authentication Methods</h5>
<div class="d-grid gap-2">
<div class="p-2 rounded" style="background-color: var(--primary-bg-light);">
<i class="fas fa-cookie-bite me-2"></i>Session-based (Web)
</div>
<div class="p-2 rounded" style="background-color: var(--secondary-bg-light);">
<i class="fas fa-key me-2"></i>JWT Tokens (API)
</div>
<div class="p-2 rounded" style="background-color: var(--primary-bg-light);">
<i class="fas fa-shield-alt me-2"></i>API Keys (Management)
</div>
<div class="p-2 rounded" style="background-color: var(--secondary-bg-light);">
<i class="fas fa-user-shield me-2"></i>Role-based Access
</div>
</div>
</div>
</div>
<!-- HTTP Status Codes -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-body">
<h5 class="card-title mb-3" style="color: var(--primary-color);">HTTP Status Codes</h5>
<div class="small">
<div class="mb-2">
<span class="badge bg-success me-2">200</span>
<strong>OK</strong> - Request successful
</div>
<div class="mb-2">
<span class="badge bg-primary me-2">201</span>
<strong>Created</strong> - Resource created
</div>
<div class="mb-2">
<span class="badge bg-warning me-2">400</span>
<strong>Bad Request</strong> - Invalid input
</div>
<div class="mb-2">
<span class="badge bg-danger me-2">401</span>
<strong>Unauthorized</strong> - Authentication required
</div>
<div class="mb-2">
<span class="badge bg-danger me-2">403</span>
<strong>Forbidden</strong> - Access denied
</div>
<div class="mb-2">
<span class="badge bg-secondary me-2">404</span>
<strong>Not Found</strong> - Resource not found
</div>
<div class="mb-2">
<span class="badge bg-danger me-2">500</span>
<strong>Server Error</strong> - Internal error
</div>
</div>
</div>
</div>
<!-- Rate Limiting -->
<div class="card border-0 shadow-sm">
<div class="card-body">
<h5 class="card-title mb-3" style="color: var(--primary-color);">Rate Limiting</h5>
<div class="small">
<div class="mb-2">
<i class="fas fa-clock text-primary me-2"></i>
<strong>Standard</strong> - 100 requests/minute
</div>
<div class="mb-2">
<i class="fas fa-user-shield text-primary me-2"></i>
<strong>Authenticated</strong> - 500 requests/minute
</div>
<div class="mb-2">
<i class="fas fa-crown text-primary me-2"></i>
<strong>Admin</strong> - 1000 requests/minute
</div>
<div class="mb-2">
<i class="fas fa-exclamation-triangle text-warning me-2"></i>
<strong>Exceeded</strong> - 429 Too Many Requests
</div>
</div>
</div>
</div>
</div>
</div>