{"id":38249362,"url":"https://github.com/hak5/nano-tetra-modules","last_synced_at":"2026-01-17T01:26:18.311Z","repository":{"id":51181549,"uuid":"110928365","full_name":"hak5/nano-tetra-modules","owner":"hak5","description":"The Official WiFi Pineapple Module Repository for the NANO \u0026 TETRA","archived":false,"fork":false,"pushed_at":"2022-10-17T03:34:02.000Z","size":21602,"stargazers_count":459,"open_issues_count":15,"forks_count":141,"subscribers_count":90,"default_branch":"master","last_synced_at":"2024-03-15T17:21:13.558Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://wifipineapple.com/modules","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hak5.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-11-16T05:42:08.000Z","updated_at":"2024-03-10T20:09:01.000Z","dependencies_parsed_at":"2023-01-20T04:49:30.492Z","dependency_job_id":null,"html_url":"https://github.com/hak5/nano-tetra-modules","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hak5/nano-tetra-modules","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hak5%2Fnano-tetra-modules","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hak5%2Fnano-tetra-modules/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hak5%2Fnano-tetra-modules/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hak5%2Fnano-tetra-modules/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hak5","download_url":"https://codeload.github.com/hak5/nano-tetra-modules/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hak5%2Fnano-tetra-modules/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28491490,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T00:50:05.742Z","status":"ssl_error","status_checked_at":"2026-01-17T00:43:11.982Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2026-01-17T01:26:18.205Z","updated_at":"2026-01-17T01:26:18.285Z","avatar_url":"https://github.com/hak5.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WiFi Pineapple Module Repository\n\nThis is the module repository for the WiFi Pineapple NANO and TETRA. All the community developed modules are stored here, and developers should create pull requests for any changes to their \nmodules, or module additions.\n\n## Module Structure\nA WiFi Pineapple Module is created with HTML, AngularJS and PHP. All HTML is done using the Bootstrap CSS framework, and AngularJS combined with our [PHP \nAPI](https://wifipineapple.github.io/wifipineapple-wiki//#!api.md) allows for asynchronus updating and easy to implement features for your module.\n\nA basic module will request information through AngularJS to PHP, and then the PHP will provide a response to AngularJS, where it will then be displayed on the HTML page for the user to see.\n\n```\n+-------------------+         +--------------+         +-----------+         +------+\n| AngularJS Request |   --\u003e   | PHP Response |   --\u003e   | AngularJS |   --\u003e   | HTML |\n+-------------------+         +--------------+         +-----------+         +------+\n```\n\nThe structure of a module is as follows:\n```\n.\n├── api\n│   └── module.php\n├── js\n│   └── module.js\n├── module.html\n└── module.info\n```\n\nMore information on creating modules can be found [here](https://wifipineapple.github.io/wifipineapple-wiki//#!creating_modules.md) while more information on the API can be found \n[here](https://wifipineapple.github.io/wifipineapple-wiki//#!api.md).\n\n### module.info\nThe `module.info` file is a simple JSON array consisting of `author`, `description`, `devices`, `title`, and `version`. The `version` field will need to be updated with any pull request.\n\n### module.html\nThe WiFi Pineapple modules make use of Bootstrap to provide a good mobile viewing experience and a clean look. Module developers are encouraged to make use of Bootstrap components, such as \nresponsive tables and the grid system. To learn more about Bootstrap, visit the [Bootstrap Website](https://getbootstrap.com/). We also include a hook for atleast one AngularJS controller. You \ncan \nlearn more about AngularJS at the [AngularJS Website](https://angularjs.org/).\n\n```\n\u003cdiv class=\"row\"\u003e\n    \u003cdiv ng-controller=\"ExampleController\" class=\"col-md-12\"\u003e\n        {{ hello }}\n    \u003c/div\u003e\n\u003c/div\u003e\n```\n\n### module.js\nThe `js/module.js` file will house the Javascript for your module, and will be the place for controller definitions, in this brief example it will be called `ExampleController`. We will also \nset a \nvariable called `$scope.hello` with content we will receieve from our PHP. \n\n```\nregisterController(\"ExampleController\", ['$api', '$scope', function($api, $scope) {\n    $api.request({\n        module: 'ExampleModule',\n        action: 'getHello'\n    }, function(response) {\n        $scope.hello = response.text;\n    });\n}])\n```\n\nThis snippet makes use of our API to send a request to our PHP with the `getHello` action, and will set it a response into the `$scope.hello` variable.\n\n### module.php\nThe `api/module.php` file must be in the `pineapple` namespace, and contain a routing switch statement, for example:\n\n```\n\u003c?php namespace pineapple;\n\nclass ExampleModule extends Module\n{\n    public function route()\n    {\n        switch ($this-\u003erequest-\u003eaction) {\n            case 'getHello':\n                $this-\u003ehello();\n                break;\n            }\n    }\n}\n```\n\nWe will then need to call our function `hello()`, which should be `private` and should set a response:\n```\nprivate function hello()\n{\n    $this-\u003eresponse = array('text' =\u003e \"Hello World\");\n}\n```\n\n**Note:** You should never use the closing `?\u003e` PHP tag in your `module.php` file.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhak5%2Fnano-tetra-modules","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhak5%2Fnano-tetra-modules","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhak5%2Fnano-tetra-modules/lists"}