lib/Service/SmsrelentlessService.php
a92694d2
 <?php
 /**
  * @copyright 2021 Double Bastion LLC <www.doublebastion.com>
  *
  * @author Double Bastion LLC
  *
  * @license GNU AGPL version 3 or any later version
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
  * License as published by the Free Software Foundation; either
  * version 3 of the License, or any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
  *
  * You should have received a copy of the GNU Affero General Public
  * License along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  */
 
 declare(strict_types=1);
 
 namespace OCA\SMSRelentless\Service;
 
 use OCP\DB\QueryBuilder\IQueryBuilder;
 use OCP\IDBConnection;
 use OCP\Security\ICrypto;
 
 use OCP\AppFramework\ApiController;
 use OCP\AppFramework\Controller;
 use OCP\IRequest;
 use OCP\IGroupManager;
 
 
 class SmsrelentlessService {
 
      private $connection;
      private $crypto;
      private $groupManager;
 
      public function __construct(IDBConnection $connection, ICrypto $crypto, IGroupManager $groupManager) {
                 $this->connection = $connection;
 
                 $this->crypto = $crypto;
                 $this->groupManager = $groupManager;
      }
 
 
      /**
       * @NoAdminRequired
       *
       */
      public function insertrecsms($userId, $recmessagearr) {
 
             $escapedmessage = str_replace("'", "\'", $recmessagearr[4]);
             $sql = "INSERT INTO `*PREFIX*sms_relent_received` (`user_id`, `message_id`, `date`, `from`, `to`, `message`) VALUES ('$userId', '$recmessagearr[0]', '$recmessagearr[1]', '$recmessagearr[2]', '$recmessagearr[3]', '$escapedmessage')";
             $res = $this->connection->prepare($sql);
             $res->execute();
      }
 
 
      /**
       * @NoAdminRequired
       *
       */
      public function insertsentsms($userId, $sentmessagearr) {
 
             $sql = "INSERT INTO `*PREFIX*sms_relent_sent` (`user_id`, `message_id`, `date`, `from`, `to`, `network`, `price`, `status`, `deliveryreceipt`, `message`) VALUES ('$userId', '$sentmessagearr[0]', '$sentmessagearr[1]', '$sentmessagearr[2]', '$sentmessagearr[3]', '$sentmessagearr[4]', '$sentmessagearr[5]', '$sentmessagearr[6]', '$sentmessagearr[7]', '$sentmessagearr[8]')";
             $res = $this->connection->prepare($sql);
             $res->execute();
      }
 
 
      /**
       * @NoAdminRequired
       *
       */
      public function updatedeliverystatustel($ncuserfortelnyxdel, $messageid, $network, $messageprice, $messagestatus, $deliverystatus) {
 
             $sqlupdateds = "UPDATE `*PREFIX*sms_relent_sent` SET `price` = '$messageprice', `status` = '$messagestatus', `deliveryreceipt` = '$deliverystatus', `network` = '$network' WHERE `message_id` = '$messageid' AND `user_id` = '$ncuserfortelnyxdel'";
             $resupdateds = $this->connection->prepare($sqlupdateds);
             $resupdateds->execute();
      }
 
 
      /**
       * @NoAdminRequired
       *
       */
      public function updatedeliverystatusnex($ncuserforplivodel, $messageid, $networkcode, $messageprice, $mStatus, $deliverystatus) {
 
             $sql8 = "UPDATE `*PREFIX*sms_relent_sent` SET `price` = '$messageprice', `deliveryreceipt` = '$deliverystatus' , `status` = '$mStatus', `network` = '$networkcode' WHERE `message_id` = '$messageid' AND `user_id` = '$ncuserforplivodel'";
             $res8 = $this->connection->prepare($sql8);
             $res8->execute();
      }
 
 
      /**
       * @NoAdminRequired
       */
      public function getreceivedtable($userId) {
 
         $sql9 = "SELECT * FROM `*PREFIX*sms_relent_received` WHERE `user_id` = '$userId'";
         $res9 = $this->connection->prepare($sql9);
         $res9->execute();
 
         $recdatatable = [];
         while ($rowfetched = $res9->fetch()){
                $recdatatable[] = $rowfetched;
         }
 
         $recdatafromdb = $recdatatable;
 
         $res9->closeCursor();
 
         return $recdatafromdb;
      }
 
 
      /**
       * @NoAdminRequired
       */
      public function getreceivedtablefordel($userId) {
 
         if ($this->groupManager->isAdmin($userId)) {
 
             $sql9 = "SELECT * FROM `*PREFIX*sms_relent_received` WHERE `user_id` = '$userId'";
             $res9 = $this->connection->prepare($sql9);
             $res9->execute();
 
             $recdatatable = [];
             while ($rowfetched = $res9->fetch()){
                    $recdatatable[] = $rowfetched;
             }
 
             $recdatafromdb = $recdatatable;
 
             $res9->closeCursor();
 
             return $recdatafromdb;
 
         } else { return "not permitted"; }
      }
 
 
      /**
       * @NoAdminRequired
       */
      public function removerecrows($userId, $recmessagedbIDs) {
 
         $finalrecmessagesIDs = implode(",", $recmessagedbIDs);
         $rowstobedeleted = "(" . $finalrecmessagesIDs . ")";
 
         $sql10 = "DELETE FROM `*PREFIX*sms_relent_received` WHERE `id` IN ".$rowstobedeleted.";";
         $res10 = $this->connection->prepare($sql10);
         $res10->execute();
         $res10->closeCursor();
 
         $sql13 = "SET @resetrec = 0;
                   UPDATE `*PREFIX*sms_relent_received` SET `id` = @resetrec := @resetrec + 1;
                   ALTER TABLE `*PREFIX*sms_relent_received` auto_increment=1;";
         $res13 = $this->connection->prepare($sql13);
         $res13->execute();
         $res13->closeCursor();
      }
 
 
      /**
       * @NoAdminRequired
       */
      public function getsenttable($userId) {
 
         $sql10 = "SELECT * FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = '$userId'";
 
         $res10 = $this->connection->prepare($sql10);
         $res10->execute();
 
         $sentdatatable = [];
         while ($rowfetched = $res10->fetch()){
                $sentdatatable[] = $rowfetched;
         }
 
         $sentdatafromdb = $sentdatatable;
 
         $res10->closeCursor();
 
         return $sentdatafromdb;
 
      }
 
 
      /**
       * @NoAdminRequired
       */
      public function getsenttablefordel($userId) {
 
         if ($this->groupManager->isAdmin($userId)) {
 
             $sql10 = "SELECT * FROM `*PREFIX*sms_relent_sent` WHERE `user_id` = '$userId'";
 
             $res10 = $this->connection->prepare($sql10);
             $res10->execute();
 
             $sentdatatable = [];
             while ($rowfetched = $res10->fetch()){
                    $sentdatatable[] = $rowfetched;
             }
 
             $sentdatafromdb = $sentdatatable;
 
             $res10->closeCursor();
 
             return $sentdatafromdb;
 
         } else { return "not permitted"; }
 
      }
 
 
      /**
       * @NoAdminRequired
       */
      public function removesentrows($userId, $sentmessagedbIDs) {
 
         $finalsentDbIDs = implode(",", $sentmessagedbIDs);
         $sentrowsfordelete = "(" . $finalsentDbIDs . ")";
 
         $sql11 = "DELETE FROM `*PREFIX*sms_relent_sent` WHERE `id` IN ".$sentrowsfordelete.";";
         $res11 = $this->connection->prepare($sql11);
         $res11->execute();
         $res11->closeCursor();
 
         $sql12 = "SET @resetsent = 0;
                   UPDATE `*PREFIX*sms_relent_sent` SET `id` = @resetsent := @resetsent + 1;
                   ALTER TABLE `*PREFIX*sms_relent_sent` auto_increment=1;";
         $res12 = $this->connection->prepare($sql12);
         $res12->execute();
         $res12->closeCursor();
      }
 
 
      /**
       * @NoAdminRequired
       */
      public function getmessagesperpage($userId) {
         $sqlmpp = "SELECT `user_id`, `messagesperpage` FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = '$userId'";
 
         $resmpp = $this->connection->prepare($sqlmpp);
         $resmpp->execute();
 
         $getmesperpage = $resmpp->fetch();
         $mesperpagedb = $getmesperpage['messagesperpage'];
 
         $resmpp->closeCursor();
 
         return $mesperpagedb;
      }
 
 
      /**
       * @NoAdminRequired
       */
      public function getsettings($userId) {
 
         $sql0 = "SELECT * FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = '$userId'";
 
         $res0 = $this->connection->prepare($sql0);
         $res0->execute();
 
         $settingsfromdb = $res0->fetch();
         if ($settingsfromdb['telapi_key'] != '') {
 
             // Send a placeholder to the browser, instead of the real API key
             $settingsfromdb['telapi_key'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
         }
         if ($settingsfromdb['tel_pub_key'] != '') {
             $settingsfromdb['tel_pub_key'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
         }
         if ($settingsfromdb['messaging_profile_id'] != '') {
             $settingsfromdb['messaging_profile_id'] = "%20%20%20%20%20%20%20%20%20%20%20%20";
         }
         if ($settingsfromdb['nexapi_key'] != '') {
             $settingsfromdb['nexapi_key'] = "%20%20%20%20%20%20%20%20%20";
         }
         if ($settingsfromdb['nexapi_secret'] != '') {
             $settingsfromdb['nexapi_secret'] = "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20";
         }
 
         $res0->closeCursor();
 
         return $settingsfromdb;
      }
 
 
      /**
       * @NoAdminRequired
       *
       */
      public function updatesettings($userId, $telapiKey, $telPubKey, $telapiUrlRec, $telapiUrl, $messagingProfileId, $nexapiKey, $nexapiSecret, $nexapiUrlRec, $nexapiUrl, $telSenderName, $nexSenderName, $messagesperpage, $getNotify, $notificationEmail, $getsmsinemail) {
 
         $sql1 = "SELECT * FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = '$userId'";
         $res1 = $this->connection->prepare($sql1);
         $res1->execute();
 
         $rowup = $res1->fetch();
         $res1->closeCursor();
 
         if ($rowup['user_id'] == '' || $rowup['user_id'] == 'undefined' || $rowup['user_id'] == null) {
 
             if ($telapiKey != '') {
                 $telapikeystrenc = $this->crypto->encrypt($telapiKey, $password = '');             
             } else { $telapikeystrenc = ''; }
 
             if ($telPubKey != '') {
                 $telpubkeystrenc =  $this->crypto->encrypt($telPubKey, $password = '');             
             } else { $telpubkeystrenc = ''; }
 
             if ($messagingProfileId != '') {
                 $messagingprofenc = $this->crypto->encrypt($messagingProfileId, $password = '');             
             } else { $messagingprofenc = ''; }
 
             if ($nexapiKey != '') {
                 $nexapikeystrenc = $this->crypto->encrypt($nexapiKey, $password = '');             
             } else { $nexapikeystrenc = ''; }
 
             if ($nexapiSecret != '') {
                 $nexapisecretstrenc = $this->crypto->encrypt($nexapiSecret, $password = '');             
             } else { $nexapisecretstrenc = ''; }
 
             $sql2 = "INSERT INTO `*PREFIX*sms_relent_settings` (`user_id`, `telapi_key`, `tel_pub_key`, `telapi_url_rec`, `telapi_url`, `messaging_profile_id`, `nexapi_key`, `nexapi_secret`, `nexapi_url_rec`, `nexapi_url`, `tel_sender_name`, `nex_sender_name`, `messagesperpage`, `get_notify`, `notification_email`, `getsmsinemail`) VALUES ('$userId', '$telapikeystrenc', '$telpubkeystrenc', '$telapiUrlRec', '$telapiUrl', '$messagingprofenc', '$nexapikeystrenc', '$nexapisecretstrenc', '$nexapiUrlRec', '$nexapiUrl', '$telSenderName', '$nexSenderName', '$messagesperpage', '$getNotify', '$notificationEmail', '$getsmsinemail')";
             $res2 = $this->connection->prepare($sql2);
             $res2->execute();
 
         } else {
 
             if ($telapiKey != '' && $telapiKey != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
                 $telapikeystrenc = $this->crypto->encrypt($telapiKey, $password = '');                
             } elseif ($telapiKey == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
                 $telapikeystrenc = $rowup['telapi_key'];
             } elseif ($telapiKey == '') {
                 $telapikeystrenc = '';
             }
 
             if ($telPubKey != '' && $telPubKey != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
                 $telpubkeystrenc = $this->crypto->encrypt($telPubKey, $password = '');                
             } elseif ($telPubKey == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
                 $telpubkeystrenc = $rowup['tel_pub_key'];
             } elseif ($telPubKey == '') {
                 $telpubkeystrenc = '';
             }
 
             if ($messagingProfileId != '' && $messagingProfileId != "%20%20%20%20%20%20%20%20%20%20%20%20") {
                 $messagingprofenc = $this->crypto->encrypt($messagingProfileId, $password = '');                
             } elseif ($messagingProfileId == "%20%20%20%20%20%20%20%20%20%20%20%20") {
                 $messagingprofenc = $rowup['messaging_profile_id'];
             } elseif ($messagingProfileId == '') {
                 $messagingprofenc = '';
             }
 
             if ($nexapiKey != '' && $nexapiKey != "%20%20%20%20%20%20%20%20%20") {
                 $nexapikeystrenc = $this->crypto->encrypt($nexapiKey, $password = '');                
             } elseif ($nexapiKey == "%20%20%20%20%20%20%20%20%20") {
                 $nexapikeystrenc = $rowup['nexapi_key'];
             } elseif ($nexapiKey == '') {
                 $nexapikeystrenc = '';
             }
 
             if ($nexapiSecret != '' && $nexapiSecret != "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
                 $nexapisecretstrenc = $this->crypto->encrypt($nexapiSecret, $password = '');                
             } elseif ($nexapiSecret == "%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20") {
                 $nexapisecretstrenc = $rowup['nexapi_secret'];
             } elseif ($nexapiSecret == '') {
                 $nexapisecretstrenc = '';
             }
 
             $sql3 = "UPDATE `*PREFIX*sms_relent_settings` SET `telapi_key` = '$telapikeystrenc', `tel_pub_key` = '$telpubkeystrenc', `telapi_url_rec` = '$telapiUrlRec', `telapi_url` = '$telapiUrl', `messaging_profile_id` = '$messagingprofenc', `nexapi_key` = '$nexapikeystrenc', `nexapi_secret` = '$nexapisecretstrenc', `nexapi_url_rec` = '$nexapiUrlRec', `nexapi_url` = '$nexapiUrl', `tel_sender_name` = '$telSenderName', `nex_sender_name` = '$nexSenderName', `messagesperpage` = '$messagesperpage', `get_notify` = '$getNotify', `notification_email` = '$notificationEmail', `getsmsinemail` = '$getsmsinemail' WHERE `user_id` = '$userId'";
             $res3 = $this->connection->prepare($sql3);
             $res3->execute();
         }
      }
 
     /**
      * @NoAdminRequired
      */
     public function getapicredentials($userId) {
 
         $sql7 = "SELECT * FROM `*PREFIX*sms_relent_settings` WHERE `user_id` = '$userId'";
         $res7 = $this->connection->prepare($sql7);
         $res7->execute();
         $settingsfrdb = $res7->fetch();
         $telapikeystrdec = $this->crypto->decrypt($settingsfrdb['telapi_key'], $password = '');
         $telpubkeystrdec = $this->crypto->decrypt($settingsfrdb['tel_pub_key'], $password = '');
         $telapiurlrec = $settingsfrdb['telapi_url_rec'];
         $telapiurlstr = $settingsfrdb['telapi_url'];
         $messagingprofid = $this->crypto->decrypt($settingsfrdb['messaging_profile_id'], $password = '');
         $nexapikeystr = $this->crypto->decrypt($settingsfrdb['nexapi_key'], $password = '');
         $nexapisecretstr = $this->crypto->decrypt($settingsfrdb['nexapi_secret'], $password = '');
         $nexapiurlrecsms = $settingsfrdb['nexapi_url_rec'];
         $nexapiurldelrcpt = $settingsfrdb['nexapi_url'];
         $gettelsendername = $settingsfrdb['tel_sender_name'];
         $getnexsendername = $settingsfrdb['nex_sender_name'];
         $getmessagesperpage = $settingsfrdb['messagesperpage'];
         $getnotification = $settingsfrdb['get_notify'];
         $notifyemail = $settingsfrdb['notification_email'];
         $includesmsinemail = $settingsfrdb['getsmsinemail'];
         $res7->closeCursor();
 
         return [$telapikeystrdec, $telpubkeystrdec, $telapiurlrec, $telapiurlstr, $messagingprofid, $nexapikeystr, $nexapisecretstr, $nexapiurlrecsms, $nexapiurldelrcpt, $gettelsendername, $getnexsendername, $getmessagesperpage, $getnotification, $notifyemail, $includesmsinemail];
 
     }
 
     /**
      * @NoAdminRequired
      */
     public function getuserbytelrecwhurl($recsmswebhookurl) {
 
         $sqlrec = "SELECT `user_id`, `telapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `telapi_url_rec` = '$recsmswebhookurl'";
         $resrecsql = $this->connection->prepare($sqlrec);
         $resrecsql->execute();
         $datafromdb = $resrecsql->fetch();
         $ncusertelrec = $datafromdb['user_id'];
         $resrecsql->closeCursor();
 
         return $ncusertelrec;
     }
 
     /**
      * @NoAdminRequired
      */
     public function getuserbyteldelrwhurl($delsmswebhookurl) {
 
         $sqldel = "SELECT `user_id`, `telapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `telapi_url` = '$delsmswebhookurl'";
         $ressqldel = $this->connection->prepare($sqldel);
         $ressqldel->execute();
         $datafromdbdel = $ressqldel->fetch();
         $ncuserteldel = $datafromdbdel['user_id'];
         $ressqldel->closeCursor();
 
         return $ncuserteldel;
     }
 
     /**
      * @NoAdminRequired
      */
     public function getuserbyplivorecwhurl($plivorecurl) {
 
         $sqlrecpl = "SELECT `user_id`, `nexapi_url_rec` FROM `*PREFIX*sms_relent_settings` WHERE `nexapi_url_rec` = '$plivorecurl'";
         $plresrecsql = $this->connection->prepare($sqlrecpl);
         $plresrecsql->execute();
         $pldatafromdb = $plresrecsql->fetch();
         $ncuserplrec = $pldatafromdb['user_id'];
         $plresrecsql->closeCursor();
 
         return $ncuserplrec;
     }
 
     /**
      * @NoAdminRequired
      */
     public function getuserbyplivodelrwhurl($plivodrurl) {
 
         $sqldrpl = "SELECT `user_id`, `nexapi_url` FROM `*PREFIX*sms_relent_settings` WHERE `nexapi_url` = '$plivodrurl'";
         $ressqldelrec = $this->connection->prepare($sqldrpl);
         $ressqldelrec->execute();
         $datafromdbdr = $ressqldelrec->fetch();
         $ncuserplivodel = $datafromdbdr['user_id'];
         $ressqldelrec->closeCursor();
 
         return $ncuserplivodel;
     }
 
 }