b503e08384
- Fix #1: Share handler IDOR - enforce owner check on share operations - Fix #2: list_files_query IDOR - bind folder queries to authenticated user - Fix #3: Dedup handler IDOR - restrict dedup operations to file owner - Fix #4: Trash handler OptionalAuthUser - require full AuthUser - Fix #5: Error info leakage - sanitize 500 error responses - Fix #6: Chunked upload IDOR - bind upload sessions to user_id, add verify_session_owner() check on all session operations - Fix #7: CSP unsafe-inline removal - migrate all inline scripts, styles and event handlers to external files, tighten CSP to script-src 'self'; style-src 'self' New files: - static/js/core/theme-init.js (render-blocking theme init) - static/js/core/sw-register.js (service worker registration) - static/css/views/device-verify.css (extracted inline styles) - static/js/views/device-verify/device-verify.js (extracted inline script)
82 lines
1.2 KiB
CSS
82 lines
1.2 KiB
CSS
/* Loading spinner overlay */
|
|
.files-loading-spinner {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 80px 20px;
|
|
gap: 16px;
|
|
grid-column: 1 / -1;
|
|
}
|
|
|
|
.files-loading-spinner .spinner {
|
|
width: 36px;
|
|
height: 36px;
|
|
border: 3px solid #e2e8f0;
|
|
border-top-color: #ff5e3a;
|
|
border-radius: 50%;
|
|
animation: spin 0.7s linear infinite;
|
|
}
|
|
|
|
@keyframes spin {
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
.files-loading-spinner span {
|
|
font-size: 14px;
|
|
color: #a0aec0;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.dropzone {
|
|
border: 2px dashed #ddd;
|
|
border-radius: 8px;
|
|
padding: 20px;
|
|
text-align: center;
|
|
margin: 20px 0;
|
|
color: #666;
|
|
display: none;
|
|
}
|
|
|
|
.dropzone-icon {
|
|
font-size: 32px;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.dropzone.active {
|
|
border-color: #ff5e3a;
|
|
background-color: rgba(255, 94, 58, 0.05);
|
|
}
|
|
|
|
.upload-progress {
|
|
margin-top: 15px;
|
|
width: 100%;
|
|
display: none;
|
|
}
|
|
|
|
.progress-bar {
|
|
background-color: #f0f0f0;
|
|
height: 6px;
|
|
border-radius: 3px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.progress-fill {
|
|
height: 100%;
|
|
background-color: #ff5e3a;
|
|
width: 0%;
|
|
transition: width 0.3s;
|
|
}
|
|
|
|
[data-theme="dark"] .dropzone {
|
|
border-color: #475569;
|
|
color: #94a3b8;
|
|
background-color: #0f172a;
|
|
}
|
|
|
|
[data-theme="dark"] .progress-bar {
|
|
background-color: #334155;
|
|
}
|