Invio SMS da router TP-link

Inviare sms usando questa libreria: https://github.com/plewin/tp-link-modem-router

clona il repository ed entra nella cartella

installa le dipendenze con

sudo npm install -g yarn
yarn install

creiamo il file di configurazione

cp config.example.json src/config.json

e lo andiamo a modificare con i parametri che ci interessano

nano config.json

e infine inviare un sms con:

./sms-send.js numero "messaggio"

mentre per accedere all’interfaccia web:

impostare l’ip sulla config

"api_listen_host": "0.0.0.0",

e lanciare:

./api-bridge.js

per poi accedere da:

http://ip:3000

mandare sms da php

basta chiamare il file passando i parametri richiesti:

$phone = $request->input(‘phone’);
$text = $request->input(‘text’);

$ip = '192.168.1.197';
$login = 'admin';
$password = 'admin';
$output = array();
$result_code = 0;
$return = null;
$js_path = public_path() . "\\tp-link-modem-router-master\\sms-send.js";        
              
$params = "--url=\"http://" .$ip."\"";
$params .= " --login=\"" .$login."\"";
$params .= " --password=\"" .$password."\"";
$command = "node \"".$js_path."\""." ".$params." ".$phone." \"".$text."\"";

if (exec($command, $output , $result_code)==false)          
        {
        return "Error";
        }
        else
        {
            $ret_text = "datetime:".date("Y-m-d H:i:s")."\n";
            $line_cnt = 0;
            foreach ($output as $line)
            {
                $ret_text.="[".$line_cnt."] => ".$line."\n";
                $line_cnt +=1;
            }
            $ret_text.="result_code: ".$result_code;

            return $ret_text;        
        }      

PHP.ini

Se devi caricare un file e php ti dice che è troppo grande ( anche phpmyadmin ) c’è un posto dove devi andare:

/etc/php/8.1/apache2/php.ini

e lì modificare:

upload_max_filesize

memory_limit

max_execution_time

post_max_size

riferimenti qui: https://www.php.net/manual/en/features.file-upload.common-pitfalls.php

e se devi collegarti ad un database esterno SQL?

Requirements:

sudo apt-get install unixodbc-dev

installazione di pecl

sudo apt-get install php-pear

Installare phpize:

sudo apt install php-dev

installare i pdo

sudo pecl install pdo_sqlsrv

Aggiungere le estensioni:

sudo su 
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.1/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.1/mods-available/pdo_sqlsrv.ini

Abilitare l’estensione in php.ini

extension=pdo_sqlsrv.so

o con

sudo phpenmod sqlsrv pdo_sqlsrv

riavviare apache2

sudo service apache2 restart

Reference:

https://learn.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver16



PHP e Microsoft SQL

Eh, sì. Può capitare di dover interfacciare un database Microsoft SQL.

Proviamo:

Il driver si scarica da qui:
https://docs.microsoft.com/it-it/sql/connect/php/download-drivers-php-sql-server?view=sql-server-ver16

La guida per l’installazione qui:

https://docs.microsoft.com/it-it/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver16

e qui:

https://docs.microsoft.com/it-it/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver16

Aggiungere il repository ed installare i pacchetti necesari:

if ! [[ "18.04 20.04 21.04" == *"$(lsb_release -rs)"* ]];
then
    echo "Ubuntu $(lsb_release -rs) is not currently supported.";
    exit;
fi

sudo su
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list > /etc/apt/sources.list.d/mssql-release.list

exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install -y unixodbc-dev

Installare pecl, un pacchetto per gestire le estensioni php:

sudo apt install php-pear
sudo apt install php-dev
sudo apt install libcurl3-openssl-dev
sudo pecl install pecl_http

Installare i driver per PHP:

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.4/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.4/mods-available/pdo_sqlsrv.ini
exit
sudo phpenmod -v 7.4 sqlsrv pdo_sqlsrv

Configurare Apache

apt-get install libapache2-mod-php7.4 apache2

a2dismod mpm_event

a2enmod mpm_prefork

a2enmod php7.4

Riavviare Apache

sudo service apache2 restart

Altre cosse che ho dovuto installare:

per far andare a buon fine pecl install pecl_http

apt install zlib1g-dev
apt install php-http
apt install php7.4-raphf
apt install php7.4-propro
sudo pecl install raphf

Da questa guida:
https://askubuntu.com/questions/1277339/php-7-4-warning-unable-to-load-dynamic-library-sqlsrv-so-and-pdo-sqlsrv-so

sudo apt install php7.4-dev
sudo update-alternatives --set php /usr/bin/php7.4
sudo update-alternatives --set php-config /usr/bin/php-config7.4
sudo update-alternatives --set phpize /usr/bin/phpize7.4
sudo pecl install -f sqlsrv
sudo pecl install -f pdo_sqlsrv
sudo phpenmod -v 7.4 sqlsrv pdo_sqlsrv
sudo service apache2 restart 

Cifratura asimmetrica in php

chiave pubblica: serve per cifrare

chiave privata: serve per decifrare

Io genero una chiave pubblica e relativa chiave privata,
Distribuisco la pubblica, così che tutti possano cifrare messaggi da inviarmi
I messaggi per me possono essere letti solo da me, con la mia chiave privata.

$res=openssl_pkey_new();
// Get private key
openssl_pkey_export($res, $privatekey);

// Get public key
$publickey=openssl_pkey_get_details($res);
 $publickey=$publickey["key"];

echo "Private Key:<BR>$privatekey<br><br>Public Key:<BR>$publickey<BR><BR>";

$b64_public_key = base64_encode($publickey);
$b64_private_key = base64_encode($privatekey);

echo "B64 Private Key:<BR>$b64_private_key<br><br>B64 Public Key:<BR>$b64_public_key<BR><BR>";

$cleartext = 'messaggio di test';

echo "Clear text:<br>$cleartext<BR><BR>";

openssl_public_encrypt($cleartext, $crypttext, base64_decode($b64_public_key));

echo "Crypt text:<br>$crypttext<BR><BR>";

$b64_encoded = base64_encode($crypttext);
echo "B64 crypted text:<br>$b64_encoded<BR><BR>";

$b64_decoded = base64_decode($b64_encoded);
echo "from B64 crypted text:<br>$b64_decoded<BR><BR>";            

openssl_private_decrypt($b64_decoded, $decrypted, base64_decode($b64_private_key));

echo "Decrypted text:<BR>$decrypted<br><br>";