Skip to content

Conversation

@AdityaPatadiya
Copy link
Owner

Added below api endpoints:

Authentication:

POST /auth/register
Purpose: Register a new user.
Auth: Public (no token required).
Request: JSON matching [UserCreate](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) schema (likely { username, email, password }).
Response: Created user info and access token (uses [register_user](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) service). Returns token, user object (id, username, email, is_admin) and message. First registered user may be admin depending on service logic.
Notes: Calls [register_user](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) service which hashes the password, creates the user in DB and issues JWT.

POST /auth/login
Purpose: Authenticate a user and return a token.
Auth: Public.
Request: JSON matching [UserLogin](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) schema (likely { email, password }).
Response: Access token, token_type "bearer", user object (id, username, email, is_admin), message.
Notes: Uses [login_user](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) service that verifies password and issues token.

GET /auth/me
Purpose: Return the currently authenticated user's profile.
Auth: Requires valid token (Depends on [verify_token](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html)).
Request: No body; token provided via Authorization header (Bearer).
Response: { id, username, email, is_admin } for the token's subject.
Errors: 404 if user not found.

GET /auth/users
Purpose: Return list of all users.
Auth: Admin-only (enforced by helper [verify_admin_access](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) which checks token and DB is_admin).
Request: None (token required).
Response: Array of user objects { id, username, email, is_admin }.
Errors: 403 if not admin.

POST /auth/users
Purpose: Create a new user (admin-only).
Auth: Admin-only.
Request: [UserCreate](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) JSON.
Response: Same as register (calls [register_user](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html)).
Errors: 400 if email already registered.

PUT /auth/users/{user_id}
Purpose: Update an existing user (admin-only).
Auth: Admin-only.
Request: [UserCreate](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html)-like payload (username, email, password).
Response: Updated user object { id, username, email, is_admin }.
Notes: If the password field is present, it's re-hashed. Prevents duplicate email across other users. Commits/refreshes the user after changes.
Errors: 404 if user not found; 400 if new email is already in use.

DELETE /auth/users/{user_id}
Purpose: Delete a user (admin-only).
Auth: Admin-only.
Request: Path param user_id.
Response: { message: "User deleted successfully" }.
Notes: Admin cannot delete their own account (400). Commits deletion.
Errors: 404 if user not found.

PUT /auth/users/{user_id}/admin
Purpose: Toggle admin status for a user (promote/demote).
Auth: Admin-only.
Request: Path param user_id.
Response: Updated user object and message indicating promoted/demoted.
Notes: Admin cannot toggle their own admin status (400). Commits and refreshes user.
Errors: 404 if user not found.

File Integrity:

POST /api/fim/start
Purpose: Start file integrity monitoring for provided directories.
Auth: Admin-only (depends on [verify_admin_access](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html)).
Request: [FIMStartRequest](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) schema (likely { directories: List[str], excluded_files?: List[str] }).
Response: { message, directories, excluded_files } on success.
Side effects:
Validates directories exist on disk.
Ensures directories are in the FIM DB (creates missing Directory records).
Commits DB changes.
Adds a Background task that runs [fim_monitor.monitor_changes(admin_username, directories, excluded_files)](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html).
Errors: 400 for non-existent directories; 500 for failures. Rolls back FIM DB on exception.

POST /api/fim/stop
Purpose: Stop monitoring.
Auth: Admin-only.
Request: [FIMStopRequest](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) (likely { directories: List[str] } or maybe empty); body validated by schema.
Response: { message, stopped_directories }.
Side effects: Stops observer thread if alive.
Errors: 500 on failure.

GET /api/fim/status
Purpose: Get monitoring status and watched directories.
Auth: Token required (verify_token) — not strictly admin-only (uses token dependency).
Request: None (token required).
Response: [FIMStatusResponse](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) model containing:
is_monitoring (bool)
watched_directories (List[str])
total_watched (int)
Notes: Reads [fim_monitor.observer](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) liveness and Directory table in FIM DB. 500 on errors.

GET /api/fim/changes
Purpose: Fetch detected file changes (added/modified/deleted).
Auth: Token required (verify_token).
Request: Optional query param [directory](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) to filter changes.
Response: [FIMChangesResponse](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) model (added, modified, deleted maps and total_changes).
Notes:
Queries [FileMetadata](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) rows where status != 'current', optionally filtered by directory.
Organizes changes into three dicts keyed by item path; includes hash, last_modified, type, detected_at.
Uses [detected_at](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) descending.
500 on failure.

GET /api/fim/logs
Purpose: Retrieve FIM log files.
Auth: Token required (verify_token).
Request: Optional query param [directory](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) to fetch logs only for that directory.
Response: List of [FIMLogsResponse](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) objects containing { directory, log_file, content }.
Notes:
Reads files under project logs folder named FIM_<dir>.log.
404 if no logs found for requested directory or no logs at all.
Handles IO and returns 500 otherwise.

POST /api/fim/restore
Purpose: Restore files from backup for a given path.
Auth: Admin-only.
Request: [FIMRestoreRequest](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) (likely { path_to_restore: str }).
Response: { message, restored_path } if successful.
Side effects: Calls [Backup().restore_backup(path, admin_username)](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html).
Errors: 400 if restore returns falsy; 500 on exceptions.

POST /api/fim/add-path
Purpose: Add a new directory to the monitoring list.
Auth: Admin-only.
Request: [FIMAddPathRequest](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) schema (likely { directory: str }).
Response: { message, directory, total_monitored }.
Side effects:
Validates directory exists on disk.
Inserts new Directory record into FIM DB.
Optionally appends to [fim_monitor.current_directories](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) if monitoring active.
Errors: 400 if directory doesn't exist or is already monitored, 500 on failure.

POST /api/fim/reset-baseline
Purpose: Reset baseline for specified directories (recalculate baseline).
Auth: Admin-only.
Request: [FIMStartRequest](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html) schema (reused; contains directories list).
Response: { message, directories } on success.
Side effects: Calls [fim_monitor.reset_baseline(admin_username, directories)](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html).
Errors: 500 on failure.

GET /api/fim/baseline
Purpose: Get current baseline entries (status == 'current') for all or a specific directory.
Auth: Token required (verify_token).
Request: Optional query param [directory](vscode-file://vscode-app/opt/visual-studio-code/resources/app/out/vs/code/electron-browser/workbench/workbench.html).
Response: { baseline: { directory_path: { item_path: { type, hash, last_modified } } }, total_items: int }
Notes:
If directory parameter provided and not found, returns 404.
500 on other failures.
  • Rest of the apis will be implementated sooner....

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants