File indexing completed on 2024-05-12 05:58:30

0001 <?php
0002 /**
0003  *  ocs-webserver
0004  *
0005  *  Copyright 2016 by pling GmbH.
0006  *
0007  *    This file is part of ocs-webserver.
0008  *
0009  *    This program is free software: you can redistribute it and/or modify
0010  *    it under the terms of the GNU Affero General Public License as
0011  *    published by the Free Software Foundation, either version 3 of the
0012  *    License, or (at your option) any later version.
0013  *
0014  *    This program is distributed in the hope that it will be useful,
0015  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
0016  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0017  *    GNU Affero General Public License for more details.
0018  *
0019  *    You should have received a copy of the GNU Affero General Public License
0020  *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
0021  *
0022  * Created: 06.08.2018
0023  */
0024 
0025 /**
0026  * Class Backend_CexportController
0027  * @deprecated
0028  */
0029 class Backend_CexportController extends Local_Controller_Action_CliAbstract
0030 {
0031 
0032     const filename = "member_export.log";
0033     const filename_errors = "member_export.error.log";
0034 
0035     protected $logfile;
0036     protected $errorlogfile;
0037 
0038     /**
0039      * @throws Zend_Exception
0040      */
0041     public function runAction()
0042     {
0043         $member_id = (int)$this->getParam("m");
0044         $member = $this->getMember($member_id);
0045         if (false === $this->isValidUsername($member)) {
0046             throw new Zend_Exception('username is not valid');
0047         }
0048         $this->logfile = realpath(APPLICATION_DATA . "/logs") . DIRECTORY_SEPARATOR . self::filename;
0049         $this->errorlogfile = realpath(APPLICATION_DATA . "/logs") . DIRECTORY_SEPARATOR . self::filename_errors;
0050         $this->exportMember($member);
0051     }
0052 
0053     /**
0054      * @param int $member_id
0055      *
0056      * @return array|null
0057      * @throws Zend_Exception
0058      */
0059     private function getMember($member_id)
0060     {
0061         $sql = "
0062             SELECT `mei`.`external_id`,
0063                    `m`.`member_id`, 
0064                    `m`.`username`, 
0065                    `me`.`email_address`,
0066                    `me`.`email_address` AS `email`, 
0067                    `me`.`email_address` AS `mail`, 
0068                    `m`.`password`, 
0069                    `m`.`roleId`, 
0070                    `m`.`firstname`, 
0071                    `m`.`lastname`, 
0072                    `m`.`profile_image_url`, 
0073                    `m`.`created_at`, 
0074                    `m`.`changed_at`, 
0075                    `m`.`source_id`, 
0076                    `m`.`biography`,
0077                    1 AS `mail_checked`,
0078                    `m`.`is_active`,
0079                    `m`.`is_deleted`,
0080                    `m`.`password_type`
0081             FROM `member` AS `m`
0082             LEFT JOIN `member_email` AS `me` ON `me`.`email_member_id` = `m`.`member_id` AND `me`.`email_primary` = 1
0083             LEFT JOIN `member_external_id` AS `mei` ON `mei`.`member_id` = `m`.`member_id`
0084             WHERE `m`.`member_id` = :memberId
0085               AND `m`.`is_active` = 1 
0086               AND `m`.`is_deleted` = 0 
0087               AND `me`.`email_checked` IS NOT NULL 
0088               AND `me`.`email_deleted` = 0
0089               AND LOCATE('_double', `m`.username) = 0 
0090               AND LOCATE('_double', `me`.`email_address`) = 0
0091             ORDER BY `m`.`member_id` ASC
0092             # LIMIT 200
0093         ";
0094 
0095         $result = Zend_Db_Table::getDefaultAdapter()->fetchRow($sql, array('memberId' => $member_id));
0096 
0097         if (count($result) == 0) {
0098             throw new Zend_Exception('can not find user data for member_id');
0099         }
0100 
0101         return $result;
0102     }
0103 
0104     /**
0105      * @param array $member
0106      *
0107      * @return bool
0108      * @throws Zend_Exception
0109      */
0110     private function isValidUsername($member)
0111     {
0112         // only usernames which are valid in github/gitlab
0113         $usernameValidChars = new Local_Validate_UsernameValid();
0114 
0115         return $usernameValidChars->isValid($member['username']);
0116     }
0117 
0118     /**
0119      * @param $member
0120      *
0121      * @throws Zend_Exception
0122      */
0123     private function exportMember($member)
0124     {
0125         $this->export2OpenCode($member);
0126         $this->export2Ldap($member);
0127         $this->export2OpenId($member);
0128     }
0129 
0130     /**
0131      * @param $member
0132      *
0133      * @throws Zend_Exception
0134      */
0135     private function export2OpenCode($member)
0136     {
0137         try {
0138             $modelOpenCode = new Default_Model_Ocs_Gitlab(Zend_Registry::get('config')->settings->server->opencode);
0139             $modelOpenCode->createUserFromArray($member);
0140         } catch (Exception $e) {
0141             Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
0142         }
0143     }
0144 
0145     /**
0146      * @param array $member
0147      *
0148      * @throws Zend_Exception
0149      */
0150     private function export2Ldap($member)
0151     {
0152         try {
0153             $modelOcsIdent = new Default_Model_Ocs_Ldap();
0154             $modelOcsIdent->addUserFromArray($member);
0155         } catch (Zend_Exception $e) {
0156             Zend_Registry::get('logger')->err($e->getMessage() . PHP_EOL . $e->getTraceAsString());
0157         }
0158         $errors = $modelOcsIdent->getMessages();
0159         Zend_Registry::get('logger')->info(print_r($errors, true));
0160     }
0161 
0162     private function export2OpenId($member)
0163     {
0164         $error = '';
0165         $id_server = new Default_Model_Ocs_OAuth();
0166         try {
0167             $id_server->createUserFromArray($member, true); // try create
0168             return;
0169         } catch (Exception $e) {
0170             $error = $e->getMessage();
0171             $this->logErrorMsg($e->getMessage() . PHP_EOL . $e->getTraceAsString());
0172         }
0173         if (strpos($error, 'duplicate') !== false) {
0174             try {
0175                 $id_server->createUserFromArray($member);
0176             } catch (Zend_Exception $e) {
0177                 $this->logErrorMsg($e->getMessage() . PHP_EOL . $e->getTraceAsString());
0178             }
0179         }
0180     }
0181 
0182     /**
0183      * @param string $errMsg
0184      */
0185     private function logErrorMsg($errMsg)
0186     {
0187         try {
0188             Zend_Registry::get('logger')->err($errMsg . PHP_EOL);
0189         } catch (Zend_Exception $e) {
0190             error_log(__METHOD__ . ' - ' . $e->getMessage());
0191         }
0192     }
0193 
0194 }