{"id":25948812,"url":"https://github.com/falitroke/secure-task-manager","last_synced_at":"2026-04-13T15:33:09.567Z","repository":{"id":280009654,"uuid":"940741737","full_name":"falitroke/Secure-Task-Manager","owner":"falitroke","description":"A task management web application with secure authentication and real-time updates, built for team collaboration.","archived":false,"fork":false,"pushed_at":"2025-02-28T19:39:01.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-28T22:06:15.426Z","etag":null,"topics":["docker","flask","full-stack","javascript","jwt-authentication","react","rest-api","task-manager"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/falitroke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-28T17:53:20.000Z","updated_at":"2025-02-28T20:00:04.000Z","dependencies_parsed_at":"2025-02-28T22:06:20.485Z","dependency_job_id":"83cbd8bb-c122-43af-bb49-e59980cce4c5","html_url":"https://github.com/falitroke/Secure-Task-Manager","commit_stats":null,"previous_names":["falitroke/secure-task-manager"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falitroke%2FSecure-Task-Manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falitroke%2FSecure-Task-Manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falitroke%2FSecure-Task-Manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/falitroke%2FSecure-Task-Manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/falitroke","download_url":"https://codeload.github.com/falitroke/Secure-Task-Manager/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241837190,"owners_count":20028322,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","flask","full-stack","javascript","jwt-authentication","react","rest-api","task-manager"],"created_at":"2025-03-04T11:22:59.139Z","updated_at":"2026-04-13T15:33:09.522Z","avatar_url":"https://github.com/falitroke.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Secure Task Manager\n\n![Build Status](https://github.com/rafael-fuentes/secure-task-manager/actions/workflows/ci.yml/badge.svg)\n![Code Coverage](https://img.shields.io/badge/coverage-90%25-green)\n![Version](https://img.shields.io/badge/version-1.0.0-blue)\n\nA task management web application with secure authentication and real-time updates, built for team collaboration.\n\n## Project Overview\nSecure Task Manager enables users to create, assign, and manage tasks with JWT-based authentication and PostgreSQL-backed storage (defaults to SQLite if not configured). It leverages Flask for the backend and React for a responsive frontend, showcasing full-stack development and cybersecurity principles. This project demonstrates advanced skills in Python and JavaScript, REST API design, database integration, and secure authentication workflows.\n\nKey features:\n- RESTful APIs for task management\n- JWT-based authentication with role-based access potential\n- Responsive UI with real-time task updates\n- Dockerized deployment with CI/CD integration\n\n## Installation Guide\nFollow these steps to set up the project locally:\n\n### Prerequisites\n- Python 3.9+\n- Node.js 16+\n- PostgreSQL (optional, defaults to SQLite)\n\n### Setup\n1. **Clone the repository**:\n   ```bash\n   git clone https://github.com/rafael-fuentes/secure-task-manager.git\n   cd secure-task-manager\n   ```\n   \n2. **Install Python dependencies**:\n   ```bash\n   pip install -r requirements.txt\n   ```\n3. **Install Node.js dependencies**:\n   ```bash\n   npm install\n   ```\n4. **Set up environment variables** in a `.env` file:\n   ```\n   DATABASE_URL=postgresql://user:password@localhost:5432/tasks\n   JWT_SECRET=your-secret-key\n   ```\n   - `DATABASE_URL`: Use your PostgreSQL connection string or omit for SQLite.\n   - `JWT_SECRET`: A strong secret key for JWT signing (e.g., generated via `openssl rand -hex 32`).\n\n5. **Run the app**:\n   ```bash\n   npm start\n   ```\n   - This builds the React frontend and starts the Flask server on `http://localhost:5000`.\n\n## Usage Examples\nHere’s how to interact with Secure Task Manager:\n\n### Via the Web Interface\n1. Open `http://localhost:5000` in your browser.\n2. Click \"Login\" (uses default credentials: `admin`/`securepass`).\n3. Enter a task title and assignee, then click \"Add Task\" to create a task.\n4. View the updated task list in real-time.\n\n### Via API (using `curl` or Postman)\n- **Login**:\n   ```bash\n   curl -X POST -H \"Content-Type: application/json\" \\\n        -d '{\"username\": \"admin\", \"password\": \"securepass\"}' \\\n        http://localhost:5000/api/login\n   ```\n   Response: `{\"access_token\": \"\u003cjwt_token\u003e\"}`\n\n- **Create a Task**:\n   ```bash\n   curl -X POST -H \"Content-Type: application/json\" \\\n        -H \"Authorization: Bearer \u003cjwt_token\u003e\" \\\n        -d '{\"title\": \"Finish report\", \"assignee\": \"user1\"}' \\\n        http://localhost:5000/api/tasks\n   ```\n   Response: `{\"id\": 1, \"title\": \"Finish report\", \"assignee\": \"user1\"}`\n\n- **View Tasks**:\n   ```bash\n   curl -H \"Authorization: Bearer \u003cjwt_token\u003e\" \\\n        http://localhost:5000/api/tasks\n   ```\n   Response: `[ {\"id\": 1, \"title\": \"Finish report\", \"assignee\": \"user1\"} ]`\n\n## API Documentation\nThe API is served under the base URL `http://localhost:5000/api`.\n\n### POST /login\nAuthenticate a user and return a JWT token.\n- **Request Body**: `{ \"username\": \"string\", \"password\": \"string\" }`\n- **Response**: `{ \"access_token\": \"jwt_string\" }`\n- **Status Codes**: \n  - 200: Success\n  - 401: Unauthorized (invalid credentials)\n\n### GET /tasks\nRetrieve all tasks (authenticated).\n- **Headers**: `Authorization: Bearer \u003ctoken\u003e`\n- **Response**: `[ { \"id\": int, \"title\": \"string\", \"assignee\": \"string\" } ]`\n- **Status Codes**: \n  - 200: Success\n  - 401: Unauthorized (missing or invalid token)\n\n### POST /tasks\nCreate a new task (authenticated).\n- **Headers**: `Authorization: Bearer \u003ctoken\u003e`\n- **Request Body**: `{ \"title\": \"string\", \"assignee\": \"string\" }`\n- **Response**: `{ \"id\": int, \"title\": \"string\", \"assignee\": \"string\" }`\n- **Status Codes**: \n  - 201: Created\n  - 400: Bad Request (missing required fields)\n  - 401: Unauthorized (missing or invalid token)\n\n## Tutorial: Using Secure Task Manager\n### Running Locally\n1. After installation, start the app with `npm start`.\n2. Access `http://localhost:5000` in your browser.\n3. Log in with the default credentials (`admin`/`securepass`).\n4. Add tasks via the form and see them listed immediately.\n\n### Testing the API\n1. Use a tool like Postman or `curl` to test the endpoints.\n2. Start by logging in to get a JWT token, then use it in the `Authorization` header for subsequent requests.\n\n### Deployment\n- **Docker**: Build and run locally:\n  ```bash\n  docker build -t secure-task-manager .\n  docker run -p 5000:5000 secure-task-manager\n  ```\n- **Heroku**: Deploy via the CI/CD pipeline (see Contributing Guidelines).\n\n## Contributing Guidelines\nContributions are welcome! Follow these steps:\n\n1. **Fork the repository** and create a feature branch:\n   ```bash\n   git checkout -b feature/new-feature\n   ```\n2. **Code Standards**:\n   - Python: Adhere to PEP8 (use `flake8` for linting).\n   - JavaScript: Follow ESLint rules (config in `.eslintrc.json`, not included but recommended).\n3. **Testing**:\n   - Add unit tests in `tests/` using `pytest`.\n   - Aim for ≥85% code coverage (`pytest --cov=src`).\n4. **Commit and Push**:\n   - Use clear commit messages (e.g., `feat: add task deletion endpoint`).\n   - Push your branch: `git push origin feature/new-feature`.\n5. **Submit a Pull Request**:\n   - Include a detailed description of changes.\n   - Ensure the CI pipeline passes (tests, build).\n\n### CI/CD Pipeline\n- The GitHub Actions workflow (`ci.yml`) runs tests, builds a Docker image, and deploys to Heroku on `main` branch pushes.\n- Set `HEROKU_API_KEY` in GitHub Secrets for deployment.\n\n## License Information\nMIT License\n\nCopyright (c) 2025 Rafael Fuentes\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n```\n\n---\n\n### Notes on Consolidation\n- **Unified Structure**: All sections (overview, installation, usage, API docs, tutorial, contributing, license) are now in one file, maintaining the required `readme_specs` sections and badges.\n- **Clarity**: Each section is clearly separated with headers and includes all relevant details from the previous files.\n- **Completeness**: The content covers the full scope of the project, including practical examples and deployment instructions, while adhering to the quality standards (e.g., documentation, best practices).\n\nThis single `README.md` serves as a comprehensive guide for users, contributors, and evaluators of Rafael Fuentes’ portfolio. Let me know if you’d like further adjustments or additional details!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffalitroke%2Fsecure-task-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffalitroke%2Fsecure-task-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffalitroke%2Fsecure-task-manager/lists"}