PDA

Просмотр полной версии : [3] Wi-Fi Pineapple - Создаем модуль. Часть 2


n3d.b0y
09.02.2019, 16:27
https://forum.antichat.xyz/attachments/4836491/img_8a41ef9ff6.png
Привет, античат !

Вводная информация (https://forum.antichat.xyz/threads/566512/)
Создаем модуль. Часть 1 (https://forum.antichat.xyz/threads/566538/)

Это вторая статья посвященная написанию модуля для WiFi Pineapple. В данной уроке мы разберем базовую структуру файлов и поймем как и где писать код. Хочу с акцентировать внимание на том что я не учу вас программированию, цель данной статьи показать как строиться модуль что бы вы могли сразу приступить к работе.

И так приступим, чтобы наш модуль мог быть частью админ панели ананаса нужно придерживаться стандартов заложенными разработчиками платформы. Есть файлы которые обязательно должны быть в каждом модуле, через них будет происходить взаимодействие с веб-интерфейсом а также система будет распознать что это модуль. Давайте рассмотрим и разберем обязательные файлы и каталоги модуля.

Структура основных файлов в модуле:

Код:



.
├── api
│ └── module.php
├── js
│ └── module.js
├── module.html
└── module.info


Каталог API:
Каталог api содержит обязательный файл

module.php

в нем описываются все action к которым мы будем обращаться через ajax запросы. Также хорошей практикой будет если вы все файлы php которые относятся к вашему модулю будет складывать в этот каталог.

Рассмотрим обязательный файл module.php:

PHP:



request->action) {
case 'getHello':
$this->hello();
break;
}
}
}

private function hello()
{
$this->response = array('text' => "Hello World");
}


Модуль должен всегда наследоваться от класса Module, таке должен содержать обязательный метод route в котором должна быть реализована конструкция switch которая позволит обратиться к нужному методу при ajax запросе. Не забудьте указать

namespace pineapple

и не используйте закрывающийся тэг

?>

в конце файл.

Каталог JS:
Каталог js содержит обязательный файл module.js в нем описываются все контроллеры angular.

Рассмотрим обязательный файл module.js:

JavaScript:



registerController
(
"ExampleController"
,
[
'$api'
,
'$scope'
,
function
(
$api, $scope
)
{
$api
.
request
(
{
module
:
'ExampleModule'
,
action
:
'getHello'
}
,
function
(
response
)
{
$scope
.
hello
=
response
.
text
;
}
)
;
}
]
)


Объявление контроллера немного отличаются по сравнению с обычным функционалом Angular, для этого надо использовать функцию

registerController

а в остальном ничего нового. Чтобы отправить ajax запрос к нашему action будем использовать

$api.request

, в качестве обязательных параметров нужно указать action к которому мы хотим обратиться и имя модуля у которого хотим вызвать action. Обращаться можно к любым модулям которые есть в вашем анонсе, это может уберечь вас от написание лишнего кода.

Файл module.html:
Данный файл содержит весь html который будет использовать ваш модуль. Думаю рассматривать тут нечего. Если вы не особо не знакомы с Angular то в html требуется объявить контроллер для выполнения js который приведен выше.

HTML:




{{ hello }}



Файлmodule.info:
В данном файле содержится информация о вашем модуле. Особо расписывать тут нечего просто придерживайтесь данной структуры оформления.

Код:



{
"author": "n3d.b0y",
"description": "WiFi Pineapple Example Module",
"devices": [
"nano",
"tetra"
],
"title": "ExampleModule",
"version": "1.0"
}


Вот мы и разобрали тот минимум что бы можно было приступить к написанию собственного модуля. Теперь давайте поговорим о необязательных файлах и каталогах а также о некоторых вещах на которые стоит обратить внимание.

Хранение данных:
Для хранение данных можно использовать встроенный функционал от hack5. Для начало вам надо создать файл конфигураций под ваш модуль. Файл должен храниться в каталоге

etc/config

. Название файл не имеет значение но хорошей практикой будет назвать его точно также как модель в нижнем регистре. Затем объявиться секцию с произвольным названием и тогда в нее можно будет положить любые данные.

Код:



# Cоздаем файл
touch /etc/config/pineapplemodule
# Cоздаем секцию с именем module
echo "config pineapplemodule 'module'" > /etc/config/pineapplemodule

# Добавляем переменную installed со значением 1 в секцию module
uci set pineapplemodule.module.installed=1
# Применяем изменения
uci commit pineapplemodule.module.installed

# Получаем значение переменной installed
uci get pineapplemodule.module.installed


Для работы с файлом конфигураций в php нам доступны два метода

uciGet

и

uciSet

после того как мы наследовались от класса Module.

Рекомендации:
Если вы будете использовать в модули любого рода скрипты shell, python и т.д также хорошей практикой будет складывать в каталог scripts но это не обязательно) так сделано в большинстве модулей.

Для лучшего понимание советую изучить как написаны стандартные модули и модули сторонних разработчиков hak5/wifipineapple-modules. Также изучите файлы в каталоге

pineapple/api

, обязательно обратите внимание есть на Module.php в котором находиться класс от которого мы наследуемся. Не лишним будет заглянуть в каталог

pineapple/js

.

На этом пожалуй я закончу вторую часть. Осталось осветить еще одну тему по разработки “Как собрать пакет под OpenWrt”. Пока сам не до конца разобрался в данной теме, как разберусь напишу третью часть