nodeny:docs:services

Створення модулів послуг

Послуга NoDeny - це запис у таблиці users_services, яка наділяє обліковий запис клієнта певними характеристиками, наприклад, дозволяє доступ в інтернет.

Поле tags зберігає через кому теги, що вказують на характер дії послуги, наприклад, стандартні:

  • inet - дозволяє доступ в інтернет
  • speed - керує швидкістю доступу в інтернет
  • realip – вказує видавати клієнту реальний («білий») ip

Показати всіх клієнтів, у яких підключено послугу, яка дає доступ в інтернет

SELECT uid FROM users_services WHERE tags LIKE '%, inet, %';

На один обліковий запис можна активувати кілька різних послуг, наприклад, клієнт може замовити послугу «доступ до інтернету 2 Мбіт/сек», а через час «підвищення швидкості в 2 рази на 1 день». Ці послуги можуть співіснувати разом, при цьому перша матиме теги inet та speed, а друга лише speed.

У таблиці users_services зберігаються персональні клієнта властивості послуги, а загальні у таблиці services. Зв'язок полем service_id. У свою чергу, в таблиці services поле module посилається на модуль, який обробляє даний тип послуг.

Персональні властивості послуги: час старту послуги, час закінчення послуги, теги, id послуги, яка буде підключена після закінчення поточного та id платежу, в якому відбувається списання грошей за послугу.

Послуга то, можливо «вічної», тобто. не мати часу закінчення, доки адміністратор не видалить її. Послуга може бути безкоштовною, тобто id платежу = 0. Послуга може мати автоподовження, тобто. id послуги, яка буде встановлена після завершення поточної = 0.

Загальні властивості послуги задаються у таблиці services: ім'я, опис, групи клієнтів, які можуть замовити послугу, вартість. Також у закодованому вигляді містяться параметри специфічні для конкретного модуля послуг. Оскільки неможливо передбачити всі можливі властивості для всіх послуг, специфічні параметри зберігаються у вигляді perl-дампа в полі param.

Поле module посилається на файл, який обробляє послугу. Приклад такого файлу:

файл /usr/local/nodeny/services/test.pm

#!/usr/bin/perl
package services::test;
use strict;

sub description
{
     return 'Послуга нічого не робить, просто знімає гроші';
}

sub tunes
{
     return [];
}

sub set_service
{
     my(undef, %p) = @_;
     my $service_new = $p{service_new};
     my $actions = $p{actions};
     $actions->{pay} = {
         cash => 0 - $service_new->{price},
         comment => $service_new->{description},
         category=> 100,
         discount=>$service_new->{discount},
     };
}

1;

Модуль послуги повинен мати такі підпрограми:

  • description : підказка адміну, що робить модуль. Виводиться під час створення послуги в адмінці.
  • tunes: повертає посилання на масив додаткових полів.
  • set_service: повертає список дій, які необхідно зробити при підключенні послуги.

У прикладі підпрограма tunes повертає посилання на порожній масив, тобто додаткових полів немає. set_service вказує зробити лише одну дію: платіж з категорією 100.

Дії

Підпрограма set_service має повернути список дій, які будуть виконані при підключенні послуги:

  • sql - виконання sql запиту(ів).
$actions->{sql}{1} = [
         'INSERT INTO tbl SET field=?', 'xxx'
     ];
  • pay - створення платежу таблиці pays.
$actions->{pay} = {
         cash => 10,
         comment => 'Поповнення рахунку на 10$',
         category=> 2,
     };
  • set_service - послуга відображатиметься у списку підключених послуг.
$actions->{set_service} = {
         period => 60*60,
         mode => 0,
         tags => ',x-tag,',
     };

Тут у масиві @$fields зберігаються ті специфічні параметри, про які було сказано вище: термін дії, що входить і вихідна швидкість. У описі полів ключ type вказує тип поля за класом Data, наприклад, 1 - ціле позитивне число. Значення value буде запропоновано адміністратору під час створення послуги.

Метод set_service повинен повернути хеш – список дій, які виконає модуль services при підключенні послуги. У прикладі:

  • pay - вказівка змінити баланс клієнта та створити відповідний платіж `зняття за послуги`;
  • set_service – створення запису з параметрами послуги.

Будь-яка з дій необов'язкова, проте формат конкретних дій є суворим.

Цей сайт використовує кукі. Перебуваючи тут, ви погоджуєтеся з їх зберіганням на вашому комп'ютері. Також ви підтверджуєте, що прочитали і зрозуміли нашу Політику конфіденційності. Якщо ви не згодні - покиньте сайт.Більше інформації про куки
  • nodeny/docs/services.txt
  • Востаннє змінено: 25/01/2023 22:22
  • повз Method