3.9 KiB
3.9 KiB
SIO 2024 - Projeto 1
Group
- João Pedro Fonseca Bastos - 113470 - joaop.bastos@ua.pt
- Rúben da Loura Cristóvão Gomes - 113435 - rlcg@ua.pt
- Tiago Rocha Garcia - 114184 - tiago.rgarcia@ua.pt
API
Usage
The API run as a RESTful service using the flask framework. A test API is hosted on the following URL: https://sio.tiagorg.pt.
To run, first create the virtual environment and install the dependencies:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Then, run the API:
flask run --port <port>
Note: The API is hosted on port 5000 by default.
Note: You can also run the API in debug mode with the flag --debug.
Endpoints
The API has a list of endpoints that require different permission levels to access.
Mainly, it's divided into 3 categories:
- Anonymous: No authentication required.
- Authenticated: Authentication required.
- Authorized: Authentication and permissions required.
Anonymous Endpoints
GET /: Returns a ping message.POST /reset: Resets the database and deletes all data.- Required headers:
Content-Type: application/json
- Required payload fields:
password: The reset password. Note: The reset password is123.
- Required headers:
GET /org/list: Returns a list of organizations.POST /org/create: Creates a new organization.- Required headers:
Content-Type: application/json
- Required payload fields:
name: Organization name.username: Manager username.full_name: Manager full name.email: Manager email.public_key: Manager public key.
- Required headers:
GET /file/get/<file_handle>/content: Downloads the file content.POST /user/login: Logs in a user.- Required headers:
Content-Type: application/json
- Required payload fields:
org: Organization name.username: User username.password: User password.credentials_file: User credentials file.
- Required headers:
Authenticated Endpoints
GET /user/list: Returns a list of users.- Required headers:
Authorization: token
- Optional payload parameters:
username: Filter by username.
- Required headers:
GET /file/list: Returns a list of files.- Required headers:
Authorization: token
- Optional payload parameters:
username: Filter by username.datetime: Filter by datetime. The datetime filter has the following fields:value: Epoch time in seconds.relation:ot|eq|nt. (One of the following: older than, equal to, newer than)
- Required headers:
POST /user/logout: Logs out a user.- Required headers:
Authorization: token
- Required headers:
Authorized Endpoints
POST /user/create: Creates a new user.- Required headers:
Authorization: tokenContent-Type: application/json
- Required payload fields:
username: User username.name: User name.email: User email.public_key: User public key.
- Required headers:
POST /user/<username>/suspend: Suspends a user.- Required headers:
Authorization: token
- Required headers:
POST /user/<username>/activate: Activates a user.- Required headers:
Authorization: token
- Required headers:
POST /file/upload/metadata: Uploads file metadata.- Required headers:
Authorization: tokenContent-Type: application/json
- Required payload fields:
document_name: Document name.key: Document key.alg: Document algorithm.nonce: Document nonce.
- Required headers:
POST /file/upload/content: Uploads file content, content-type must bemultipart/form-data.- Required headers:
Authorization: tokenContent-Type: multipart/form-data
- Required payload fields:
content: Document content.
- Required headers:
GET /file/get/<document_handle>/metadata: Downloads file metadata.- Required headers:
Authorization: token
- Required headers:
POST /file/delete/<document_handle>: Deletes a file.- Required headers:
- `Authorization: token
- Required headers: