File indexing completed on 2025-05-04 05:28:58
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 }