{"id":19449730,"url":"https://github.com/metakgp/mftp","last_synced_at":"2025-04-07T07:08:18.761Z","repository":{"id":48707126,"uuid":"47033131","full_name":"metakgp/mftp","owner":"metakgp","description":"CDC noticeboard scraper","archived":false,"fork":false,"pushed_at":"2025-02-11T08:34:15.000Z","size":289,"stargazers_count":37,"open_issues_count":1,"forks_count":43,"subscribers_count":17,"default_branch":"main","last_synced_at":"2025-03-31T05:07:59.404Z","etag":null,"topics":["career-development-center","cdc","erp","hacktoberfest","iitkgp-career-development-center","iitkgp-erp","iitkgp-erp-cdc","iitkgp-erp-tnp","iitkgp-training-and-placement","internship","mftp","my-freaking-training-and-placement","placement","tnp","training-and-placement"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/metakgp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-11-28T17:38:41.000Z","updated_at":"2025-02-11T08:34:19.000Z","dependencies_parsed_at":"2024-11-10T16:34:43.819Z","dependency_job_id":"fb77279b-4f71-4f3a-a314-a539b1344bc3","html_url":"https://github.com/metakgp/mftp","commit_stats":{"total_commits":272,"total_committers":17,"mean_commits":16.0,"dds":0.4154411764705882,"last_synced_commit":"b6dd82f5a6af3ed9770c3e84f185e3304bd7be4e"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metakgp%2Fmftp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metakgp%2Fmftp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metakgp%2Fmftp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metakgp%2Fmftp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/metakgp","download_url":"https://codeload.github.com/metakgp/mftp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247608151,"owners_count":20965952,"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":["career-development-center","cdc","erp","hacktoberfest","iitkgp-career-development-center","iitkgp-erp","iitkgp-erp-cdc","iitkgp-erp-tnp","iitkgp-training-and-placement","internship","mftp","my-freaking-training-and-placement","placement","tnp","training-and-placement"],"created_at":"2024-11-10T16:33:34.516Z","updated_at":"2025-04-07T07:08:18.735Z","avatar_url":"https://github.com/metakgp.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv id=\"top\"\u003e\u003c/div\u003e\n\n\u003c!-- PROJECT SHIELDS --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links--\u003e\n\u003cdiv align=\"center\"\u003e\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n[![MIT License][license-shield]][license-url]\n[![Wiki][wiki-shield]][wiki-url]\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003c!-- PROJECT LOGO --\u003e\n  \u003c!-- \u003ca href=\"https://github.com/metakgp/MFTP\"\u003e\n    \u003cimg width=\"140\" alt=\"image\" src=\"https://user-images.githubusercontent.com/86282911/206632284-cb260f57-c612-4ab5-b92b-2172c341ab23.png\"\u003e\n  \u003c/a\u003e --\u003e\n  \u003ch3 align=\"center\"\u003eMFTP - My Freaking Training \u0026 Placements\u003c/h3\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ci\u003eCDC Noticeboard on Your Mail: Where Automatic Updates Turn Chaos into Pleasure!\u003c/i\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/metakgp/MFTP/issues\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/metakgp/MFTP/issues\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n\u003csummary\u003eTable of Contents\u003c/summary\u003e\n\n- [About The Project](#about-the-project)\n- [Using docker](#using-docker)\n    - [Prerequisites](#prerequisites-with-docker)\n    - [Installation](#installation-with-docker)\n    - [Usage](#usage-with-docker)\n        - [As a cronjob](#as-a-cronjob)\n- [Without using docker](#without-using-docker)\n    - [Supports](#supports)\n    - [Prerequisites](#prerequisites-without-docker)\n    - [Installation](#installation-without-docker)\n    - [Usage](#usage-without-docker)\n- [Maintainer(s)](#maintainers)\n- [Contact](#contact)\n- [Additional documentation](#additional-documentation)\n\n\u003c/details\u003e\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n## About The Project\n\nMFTP continuously monitors the CDC Noticeboard and forwards incoming notices to the configured email address and ntfy topic. It is also available as a service and as a cronjob on linux systems along with a [heath checkup utility](./mftp-doctor) to monitor and notify for any errors.\n\n\u003e [!Warning]\n\u003e This tool is completely legal, but the way you use it can get you into legal trouble. Some things you **cannot** do are:\n\u003e - Use this tool to send CDC notifications to **any non-KGPian**.\n\u003e - Use this tool on a wide scale or publicise its running instance without consent from the Placement Committee.\n\u003e\n\u003e Please use this tool responsibly and within ethical and legal bounds. We do not promote violating company policies or laws. The extent of the punishment may very **from disciplinary action by the institute to blacklisting from CDC process**.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Using docker\n\nTo set up a local instance of the application using docker, follow the steps below.\n\n\u003cdiv id=\"prerequisites-with-docker\"\u003e\u003c/div\u003e\n\n### Prerequisites\nThe following requirements are to be satisfied for the project to function properly:\n* [For mftp](https://github.com/metakgp/mftp/blob/main/mftp/README.md#prerequisites)\n* [For mftp doctor](https://github.com/metakgp/mftp/blob/main/mftp-doctor/README.md#prerequisites)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003cdiv id=\"installation-with-docker\"\u003e\u003c/div\u003e\n\n### Installation\n\n1. Clone the repository and cd into it\n   ```sh\n   git clone https://github.com/metakgp/mftp\n   cd mftp\n   ```\n2. Follow the [installation steps for mftp with docker](https://github.com/metakgp/mftp/blob/main/mftp/README.md#installation)\n3. Follow the [installation steps for mftp doctor with docker](https://github.com/metakgp/mftp/blob/main/mftp-doctor/README.md#installation)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003cdiv id=\"usage-with-docker\"\u003e\u003c/div\u003e\n\n### Usage\n\n\u003cimg width=\"1200\" alt=\"image\" src=\"https://github.com/metakgp/mftp/assets/86282911/f06c46b6-0471-49c2-bd6b-b7bdf765a277\"\u003e\n\nIt is mandatory to provide all of the following `env variables` before the _docker-compose_ command.\n- `MFTP_CONFIG`: Absolute path to `mftp_config` directory\n- `DOCTOR_CONFIG`: Absolute path to `doctor_config` directory\n- `MFTP_MODE`: Mode of sending mail - **--smtp**, **--gmail-api** or **--ntfy**\n\n```sh\nsudo MFTP_CONFIG=/path/to/mftp_config DOCTOR_CONFIG=/path/to/doctor_config MFTP_MODE=\"--smtp\" docker-compose up -d # Using SMTP for sending mails\n```\n\n```sh\nsudo MFTP_CONFIG=/path/to/mftp_config DOCTOR_CONFIG=/path/to/doctor_config MFTP_MODE=\"--gmail-api\" docker-compose up -d # Using Gmail API for sending mails\n```\n\n```sh\nsudo MFTP_CONFIG=/path/to/mftp_config DOCTOR_CONFIG=/path/to/doctor_config MFTP_MODE=\"--ntfy\" docker-compose up -d # Using NTFY for serving notifications\n```\n\u003e [!Note] \n\u003e All the environment variables mentioned below can be placed in a `.env` file and conveniently used via:\n\u003e `sudo docker-compose --env-file .env up -d`\n\n\u003e [!Important]\n\u003e There also is `DOCTOR_MODE` as one of the environment variables, which is optional and considers one value only `--cron`. We will use it in the sub-section just next.\n\n#### As a cronjob\n\nIt is also possible to run these docker containers as a cronjob:\n\n- Comment out the line `restart: unless-stopped` in [docker-compose.yml](./docker-compose.yml)\n- Append ` --cron` into the `MFTP_MODE` env variable and set `DOCTOR_MODE` to `--cron` as well. As follows:\n    * Using Cronjob to run containers and SMTP to send mails\n      ```sh\n      sudo MFTP_CONFIG=/path/to/mftp_config DOCTOR_CONFIG=/path/to/doctor_config MFTP_MODE=\"--smtp --cron\" DOCTOR_MODE=\"--cron\" docker-compose up -d\n      ```\n    * Using Cronjob to run containers and Gmail API to send mails\n      ```sh\n      sudo MFTP_CONFIG=/path/to/mftp_config DOCTOR_CONFIG=/path/to/doctor_config MFTP_MODE=\"--gmail-api --cron\" DOCTOR_MODE=\"--cron\" docker-compose up -d\n      ```\n    * Using Cronjob to run containers and NTFY to serve notifications\n      ```sh\n      sudo MFTP_CONFIG=/path/to/mftp_config DOCTOR_CONFIG=/path/to/doctor_config MFTP_MODE=\"--ntfy --cron\" DOCTOR_MODE=\"--cron\" docker-compose up -d\n      ```\n\n\u003e [!Note] \n\u003e All the environment variables mentioned above can be placed in a `.env` file and conveniently used via:\n\u003e `sudo docker-compose --env-file .env up -d`\n\n- Add the updated command with desired [cron expression](https://crontab.cronhub.io/) into your cronjob using [crontab -e](https://www.man7.org/linux/man-pages/man5/crontab.5.html)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Without using docker\n\nTo set up a local instance of the application without using docker, follow the steps below.\n\n\u003cdiv id=\"supports\"\u003e\u003c/div\u003e\n\n### Supports:\n1. Shells\n    * `bash`\n    * `zsh`\n2. OS(s)\n    * any `*nix`[`GNU+Linux` and `Unix`]\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003cdiv id=\"prerequisites-without-docker\"\u003e\u003c/div\u003e\n\n### Prerequisites\nThe following requirements are to be satisfied for the project to function properly:\n\n* [For mftp](https://github.com/metakgp/mftp/blob/main/mftp/README.md#prerequisites-1)\n* [For mftp doctor](https://github.com/metakgp/mftp/blob/main/mftp-doctor/README.md#prerequisites-1)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003cdiv id=\"installation-without-docker\"\u003e\u003c/div\u003e\n\n### Installation\n\n_Now that the environment has been set up and configured to properly compile and run the project, the next step is to download and configure the project locally on your system._\n1. Clone the repository\n   ```sh\n   git clone https://github.com/metakgp/mftp\n   cd mftp\n   ```\n2. Install required dependencies\n   ```sh\n   pip3 install -r requirements.txt\n   ```\n3. Follow the [installation steps for mftp](https://github.com/metakgp/mftp/blob/main/mftp/README.md#installation-1)\n4. Follow the [installation steps for mftp doctor](https://github.com/metakgp/mftp/blob/main/mftp-doctor/README.md#installation-1)\n5. ##### Configure the mftp service\n   For linux systems, MFTP \u0026 MFTP Doctor are available as a service and as cronjob. To configure them, execute the following commands after navigating into the root directory of the project (inside the mftp folder).\n   ```sh\n   cd service/\n   ./configure-service.sh\n   ```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- USAGE EXAMPLES --\u003e\n\n\u003cdiv id=\"usage-without-docker\"\u003e\u003c/div\u003e\n\n### Usage\n\n\u003cimg width=\"1200\" alt=\"image\" src=\"https://user-images.githubusercontent.com/86282911/265526168-8edc1b6f-4326-4d90-b2e5-f9742d0bed6e.png\"\u003e\n\nAfter [configuring MFTP as a service](#configure-the-mftp-service), you can use the `mftp` command with several options to interact with the tool as a service.\u003cbr/\u003e Following is the help menu for the service.\n\n```graphql\nUsage: mftp [COMMAND] [OPTIONS]\n\nCommand:\n  -h, --help                   Display this help and exit\n  logs [OPTIONS]               Display last 25 lines of mftp log file\n    Options:\n      clear                    Clear the mftp log file\n      NUM                      Display last NUM lines of mftp log file\n  disable                      Disable mftp service\n  enable                       Enable mftp service\n  status                       Check status of mftp service\n  restart                      Restart mftp service\n  stop                         Stop mftp service\n  start                        Start mftp service\n\n  cronjob [OPTIONS]            Use mftp as a cronjob\n    Options:\n      enable [NUM]             Enable mftp cronjob after every NUM minutes (default is 2 minutes)\n      disable                  Disable mftp cronjob\n      status                   Check status of mftp cronjob\n\n  doctor [OPTIONS]             Use mftp doctor as a cronjob\n    Options:\n      enable [NUM]             Enable doctor cronjob after every NUM minutes (default is 2 minutes)\n      disable                  Disable doctor cronjob\n      status                   Check status of doctor cronjob\n      logs [OPTIONS]           Display last 25 lines of doctor log file\n        Options:\n          clear                Clear the doctor log file\n          NUM                  Display last NUM lines of doctor log file\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Maintainer(s)\n\n- [Arpit Bhardwaj](https://github.com/proffapt)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Contact\n\n\u003cp\u003e\n📫 Metakgp -\n\u003ca href=\"https://bit.ly/metakgp-slack\"\u003e\n  \u003cimg align=\"center\" alt=\"Metakgp's slack invite\" width=\"22px\" src=\"https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/slack.svg\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"mailto:metakgp@gmail.com\"\u003e\n  \u003cimg align=\"center\" alt=\"Metakgp's email \" width=\"22px\" src=\"https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/gmail.svg\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.facebook.com/metakgp\"\u003e\n  \u003cimg align=\"center\" alt=\"metakgp's Facebook\" width=\"22px\" src=\"https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/facebook.svg\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.linkedin.com/company/metakgp-org/\"\u003e\n  \u003cimg align=\"center\" alt=\"metakgp's LinkedIn\" width=\"22px\" src=\"https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/linkedin.svg\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://twitter.com/metakgp\"\u003e\n  \u003cimg align=\"center\" alt=\"metakgp's Twitter \" width=\"22px\" src=\"https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/twitter.svg\" /\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.instagram.com/metakgp_/\"\u003e\n  \u003cimg align=\"center\" alt=\"metakgp's Instagram\" width=\"22px\" src=\"https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/instagram.svg\" /\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Additional documentation\n\n  - [License](/LICENSE)\n  - [Code of Conduct](/.github/CODE_OF_CONDUCT.md)\n  - [Security Policy](/.github/SECURITY.md)\n  - [Contribution Guidelines](/.github/CONTRIBUTING.md)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\n[contributors-shield]: https://img.shields.io/github/contributors/metakgp/MFTP.svg?style=for-the-badge\n[contributors-url]: https://github.com/metakgp/MFTP/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/metakgp/MFTP.svg?style=for-the-badge\n[forks-url]: https://github.com/metakgp/MFTP/network/members\n[stars-shield]: https://img.shields.io/github/stars/metakgp/MFTP.svg?style=for-the-badge\n[stars-url]: https://github.com/metakgp/MFTP/stargazers\n[issues-shield]: https://img.shields.io/github/issues/metakgp/MFTP.svg?style=for-the-badge\n[issues-url]: https://github.com/metakgp/MFTP/issues\n[license-shield]: https://img.shields.io/github/license/metakgp/MFTP.svg?style=for-the-badge\n[license-url]: https://github.com/metakgp/MFTP/blob/master/LICENSE\n[wiki-shield]: https://custom-icon-badges.demolab.com/badge/metakgp_wiki-grey?logo=metakgp_logo\u0026style=for-the-badge\n[wiki-url]: https://wiki.metakgp.org\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetakgp%2Fmftp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmetakgp%2Fmftp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetakgp%2Fmftp/lists"}