protected function _init() { if (FALSE === $this->_initialized) { $baseArn = NULL; $apiKey = NULL; $apiSecret = NULL; $region = NULL; if (class_exists('Configure') && NULL !== Configure::constant('AWS_SNS_ARN_BASE')) { $baseArn = Configure::AWS_SNS_ARN_BASE; } if (class_exists('Configure') && NULL !== Configure::constant('AWS_KEY')) { $apiKey = Configure::AWS_KEY; } if (class_exists('Configure') && NULL !== Configure::constant('AWS_SNS_API_KEY')) { $apiKey = Configure::AWS_SNS_API_KEY; } if (class_exists('Configure') && NULL !== Configure::constant('AWS_SECRET')) { $apiSecret = Configure::AWS_SECRET; } if (class_exists('Configure') && NULL !== Configure::constant('AWS_SNS_API_SECRET')) { $apiSecret = Configure::AWS_SNS_API_SECRET; } if (class_exists('Configure') && NULL !== Configure::constant('AWS_REGION')) { $region = Configure::AWS_REGION; } if (class_exists('Configure') && NULL !== Configure::constant('AWS_SNS_REGION')) { $region = Configure::AWS_SNS_REGION; } elseif (defined('PROJECT_NAME') && strlen(PROJECT_NAME) > 0 && class_exists(PROJECT_NAME . 'Configure')) { $ProjectConfigure = PROJECT_NAME . 'Configure'; if (NULL !== $ProjectConfigure::constant('AWS_SNS_ARN_BASE')) { $baseArn = $ProjectConfigure::AWS_SNS_ARN_BASE; } if (NULL !== $ProjectConfigure::constant('AWS_KEY')) { $apiKey = $ProjectConfigure::AWS_KEY; } if (NULL !== $ProjectConfigure::constant('AWS_SNS_API_KEY')) { $apiKey = $ProjectConfigure::AWS_SNS_API_KEY; } if (NULL !== $ProjectConfigure::constant('AWS_SECRET')) { $apiSecret = $ProjectConfigure::AWS_SECRET; } if (NULL !== $ProjectConfigure::constant('AWS_SNS_API_SECRET')) { $apiSecret = $ProjectConfigure::AWS_SNS_API_SECRET; } if (NULL !== $ProjectConfigure::constant('AWS_REGION')) { $region = $ProjectConfigure::AWS_REGION; } if (NULL !== $ProjectConfigure::constant('AWS_SNS_REGION')) { $region = $ProjectConfigure::AWS_SNS_REGION; } } $arns = explode('://', $baseArn); $this->_arnBase = 'arn:aws:sns:' . $arns[0] . ':app/%target_pratform%/' . $arns[1]; $this->_initialized = TRUE; if (NULL === $this->_AWS) { $this->_AWS = Aws::factory(array('key' => $apiKey, 'secret' => $apiSecret, 'region' => Region::TOKYO))->get('sns'); } } }
/** */ protected static function _clearCacheImage($argFilePath, $argMemcacheDSN = NULL) { $DSN = NULL; if (NULL === $argMemcacheDSN && class_exists('Configure') && NULL !== Configure::constant('MEMCACHE_DSN')) { $DSN = Configure::MEMCACHE_DSN; } else { $DSN = $argMemcacheDSN; } if (NULL !== $DSN && class_exists('Memcache', FALSE)) { try { Memcached::start($DSN); @Memcached::delete($argFilePath); } catch (Exception $Exception) { logging(__CLASS__ . PATH_SEPARATOR . __METHOD__ . PATH_SEPARATOR . __LINE__ . PATH_SEPARATOR . $Exception->getMessage(), 'exception'); } } return true; }
public function execute($argRequestParams = NULL) { $allow = TRUE; $denyHTTP = FALSE; $denyALLIP = FALSE; if (class_exists('Configure') && NULL !== Configure::constant('DENY_HTTP')) { $denyHTTP = Configure::DENY_HTTP; } if (class_exists('Configure') && NULL !== Configure::constant('DENY_ALL_IP')) { $denyALLIP = Configure::DENY_ALL_IP; } if (defined('PROJECT_NAME') && strlen(PROJECT_NAME) > 0 && class_exists(PROJECT_NAME . 'Configure')) { $ProjectConfigure = PROJECT_NAME . 'Configure'; if (NULL !== $ProjectConfigure::constant('DENY_HTTP')) { $denyHTTP = $ProjectConfigure::DENY_HTTP; } if (NULL !== $ProjectConfigure::constant('DENY_ALL_IP')) { $denyALLIP = $ProjectConfigure::DENY_ALL_IP; } } // SSLチェック if (FALSE !== $denyHTTP && 0 !== $denyHTTP && "0" !== $denyHTTP) { if (!(isset($_SERVER['HTTPS']) && 'on' === $_SERVER['HTTPS'])) { $allow = FALSE; } } // IPアドレスチェック if (FALSE !== $denyALLIP && 0 !== $denyALLIP && "0" !== $denyALLIP) { // ローカルIPでは無い // XXX ネットマスクで許可設定をしたい場合はこの辺りを拡張する if ('::1' !== $_SERVER['REMOTE_ADDR'] && FALSE === strpos($denyALLIP, $_SERVER['REMOTE_ADDR'])) { $allow = FALSE; } } debug('allow=' . $allow); return $allow; }
protected static function _init($argDSN = NULL) { if (FALSE === self::$_initialized) { $DSN = NULL; if (class_exists('Configure') && NULL !== Configure::constant('DB_DSN')) { // 定義からセッションDBの接続情報を特定 $DSN = Configure::DB_DSN; } if (class_exists('Configure') && NULL !== Configure::constant('AUTH_DB_DSN')) { // 定義からセッションDBの接続情報を特定 $DSN = Configure::AUTH_DB_DSN; } if (class_exists('Configure') && NULL !== Configure::constant('AUTH_TBL_NAME')) { // 定義からuserTable名を特定 self::$authTable = Configure::AUTH_TBL_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('AUTH_PKEY_FIELD_NAME')) { // 定義からuserTable名を特定 self::$authPKeyField = Configure::AUTH_PKEY_FIELD_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('AUTH_ID_FIELD_NAME')) { // 定義からuserTable名を特定 self::$authIDField = Configure::AUTH_ID_FIELD_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('AUTH_PASS_FIELD_NAME')) { // 定義からuserTable名を特定 self::$authPassField = Configure::AUTH_PASS_FIELD_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('AUTH_CREATE_DATE_KEY_NAME')) { // 定義からuserTable名を特定 self::$authCreatedField = Configure::AUTH_CREATE_DATE_KEY_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('AUTH_MODIFY_DATE_KEY_NAME')) { // 定義からuserTable名を特定 self::$authModifiedField = Configure::AUTH_MODIFY_DATE_KEY_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('AUTH_ID_ENCRYPTED')) { // 定義からuserTable名を特定 self::$authIDEncrypted = Configure::AUTH_ID_ENCRYPTED; } if (class_exists('Configure') && NULL !== Configure::constant('AUTH_PASS_ENCRYPTED')) { // 定義からuserTable名を特定 self::$authPassEncrypted = Configure::AUTH_PASS_ENCRYPTED; } if (class_exists('Configure') && NULL !== Configure::constant('CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_sessionCryptKey = Configure::CRYPT_KEY; self::$_authCryptKey = Configure::CRYPT_KEY; } if (class_exists('Configure') && NULL !== Configure::constant('NETWORK_CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_sessionCryptKey = Configure::NETWORK_CRYPT_KEY; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_sessionCryptKey = Configure::SESSION_CRYPT_KEY; } if (class_exists('Configure') && NULL !== Configure::constant('DB_CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_authCryptKey = Configure::DB_CRYPT_KEY; } if (class_exists('Configure') && NULL !== Configure::constant('AUTH_CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_authCryptKey = Configure::AUTH_CRYPT_KEY; } if (class_exists('Configure') && NULL !== Configure::constant('CRYPT_IV')) { // 定義から暗号化IVを設定 self::$_sessionCryptIV = Configure::CRYPT_IV; self::$_authCryptIV = Configure::CRYPT_KEY; } if (class_exists('Configure') && NULL !== Configure::constant('NETWORK_CRYPT_IV')) { // 定義から暗号化IVを設定 self::$_sessionCryptIV = Configure::NETWORK_CRYPT_IV; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_CRYPT_IV')) { // 定義から暗号化IVを設定 self::$_sessionCryptIV = Configure::SESSION_CRYPT_IV; } if (class_exists('Configure') && NULL !== Configure::constant('DB_CRYPT_IV')) { // 定義から暗号化キーを設定 self::$_authCryptKIV = Configure::DB_CRYPT_IV; } if (class_exists('Configure') && NULL !== Configure::constant('AUTH_CRYPT_IV')) { // 定義から暗号化キーを設定 self::$_authCryptIV = Configure::AUTH_CRYPT_IV; } if (defined('PROJECT_NAME') && strlen(PROJECT_NAME) > 0 && class_exists(PROJECT_NAME . 'Configure')) { $ProjectConfigure = PROJECT_NAME . 'Configure'; if (NULL !== $ProjectConfigure::constant('DB_DSN')) { // 定義からセッションDBの接続情報を特定 $DSN = $ProjectConfigure::DB_DSN; } if (NULL !== $ProjectConfigure::constant('AUTH_DB_DSN')) { // 定義からセッションDBの接続情報を特定 $DSN = $ProjectConfigure::AUTH_DB_DSN; } if (NULL !== $ProjectConfigure::constant('AUTH_TBL_NAME')) { // 定義からuserTable名を特定 self::$authTable = $ProjectConfigure::AUTH_TBL_NAME; } if (NULL !== $ProjectConfigure::constant('AUTH_PKEY_FIELD_NAME')) { // 定義からuserTable名を特定 self::$authPKeyField = $ProjectConfigure::AUTH_PKEY_FIELD_NAME; } if (NULL !== $ProjectConfigure::constant('AUTH_ID_FIELD_NAME')) { // 定義からuserTable名を特定 self::$authIDField = $ProjectConfigure::AUTH_ID_FIELD_NAME; } if (NULL !== $ProjectConfigure::constant('AUTH_PASS_FIELD_NAME')) { // 定義からuserTable名を特定 self::$authPassField = $ProjectConfigure::AUTH_PASS_FIELD_NAME; } if (NULL !== $ProjectConfigure::constant('AUTH_CREATE_DATE_KEY_NAME')) { // 定義からuserTable名を特定 self::$authCreatedField = $ProjectConfigure::AUTH_CREATE_DATE_KEY_NAME; } if (NULL !== $ProjectConfigure::constant('AUTH_MODIFY_DATE_KEY_NAME')) { // 定義からuserTable名を特定 self::$authModifiedField = $ProjectConfigure::AUTH_MODIFY_DATE_KEY_NAME; } if (NULL !== $ProjectConfigure::constant('AUTH_ID_ENCRYPTED')) { // 定義からuserTable名を特定 self::$authIDEncrypted = $ProjectConfigure::AUTH_ID_ENCRYPTED; } if (NULL !== $ProjectConfigure::constant('AUTH_PASS_ENCRYPTED')) { // 定義からuserTable名を特定 self::$authPassEncrypted = $ProjectConfigure::AUTH_PASS_ENCRYPTED; } if (NULL !== $ProjectConfigure::constant('CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_sessionCryptKey = $ProjectConfigure::CRYPT_KEY; } if (NULL !== $ProjectConfigure::constant('NETWORK_CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_sessionCryptKey = $ProjectConfigure::NETWORK_CRYPT_KEY; } if (NULL !== $ProjectConfigure::constant('SESSION_CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_sessionCryptKey = $ProjectConfigure::SESSION_CRYPT_KEY; } if (NULL !== $ProjectConfigure::constant('DB_CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_authCryptKey = $ProjectConfigure::DB_CRYPT_KEY; } if (NULL !== $ProjectConfigure::constant('AUTH_CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_authCryptKey = $ProjectConfigure::AUTH_CRYPT_KEY; } if (NULL !== $ProjectConfigure::constant('CRYPT_IV')) { // 定義から暗号化IVを設定 self::$_sessionCryptIV = $ProjectConfigure::CRYPT_IV; self::$_authCryptIV = $ProjectConfigure::CRYPT_KEY; } if (NULL !== $ProjectConfigure::constant('NETWORK_CRYPT_IV')) { // 定義から暗号化IVを設定 self::$_sessionCryptIV = $ProjectConfigure::NETWORK_CRYPT_IV; } if (NULL !== $ProjectConfigure::constant('SESSION_CRYPT_IV')) { // 定義から暗号化IVを設定 self::$_sessionCryptIV = $ProjectConfigure::SESSION_CRYPT_IV; } if (NULL !== $ProjectConfigure::constant('DB_CRYPT_IV')) { // 定義から暗号化キーを設定 self::$_authCryptKIV = $ProjectConfigure::DB_CRYPT_IV; } if (NULL !== $ProjectConfigure::constant('AUTH_CRYPT_IV')) { // 定義から暗号化キーを設定 self::$_authCryptIV = $ProjectConfigure::AUTH_CRYPT_IV; } } // DBOを初期化 if (NULL === self::$_DBO) { if (NULL !== $argDSN) { // セッションDBの接続情報を直指定 $DSN = $argDSN; } self::$_DBO = DBO::sharedInstance($DSN); } // 初期化済み self::$_initialized = TRUE; } }
/** * Sessionクラスの初期化 * @param string セッションの範囲となるドメイン * @param string セッションの有効期限 * @param string DBDSN情報 */ protected static function _init($argDomain = NULL, $argExpiredtime = NULL, $argDSN = NULL) { if (FALSE === self::$_initialized) { // セッションの有効ドメインを設定 self::$_domain = $argDomain; if (NULL === $argDomain) { self::$_domain = $_SERVER['SERVER_NAME']; } $DSN = NULL; $expiredtime = self::$_expiredtime; if (class_exists('Configure') && NULL !== Configure::constant('DB_DSN')) { // 定義からセッションDBの接続情報を特定 $DSN = Configure::DB_DSN; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_DB_DSN')) { // 定義からセッションDBの接続情報を特定 $DSN = Configure::SESSION_DB_DSN; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_EXPIRED_TIME')) { // 定義からセッションの有効期限を設定 $expiredtime = Configure::SESSION_EXPIRED_TIME; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_TBL_NAME')) { // 定義からセッションテーブル名を特定 self::$_sessionTblName = Configure::SESSION_TBL_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_TBL_PKEY_NAME')) { // 定義からセッションテーブルのPKey名を特定 self::$_sessionPKeyName = Configure::SESSION_TBL_PKEY_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_DATE_KEY_NAME')) { // 定義から日時フィールド名を特定 self::$_sessionDateKeyName = Configure::SESSION_DATE_KEY_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_cryptKey = Configure::CRYPT_KEY; } if (class_exists('Configure') && NULL !== Configure::constant('NETWORK_CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_cryptKey = Configure::NETWORK_CRYPT_KEY; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_cryptKey = Configure::SESSION_CRYPT_KEY; } if (class_exists('Configure') && NULL !== Configure::constant('CRYPT_IV')) { // 定義から暗号化IVを設定 self::$_cryptIV = Configure::CRYPT_IV; } if (class_exists('Configure') && NULL !== Configure::constant('NETWORK_CRYPT_IV')) { // 定義から暗号化IVを設定 self::$_cryptIV = Configure::NETWORK_CRYPT_IV; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_CRYPT_IV')) { // 定義から暗号化IVを設定 self::$_cryptIV = Configure::SESSION_CRYPT_IV; } if (defined('PROJECT_NAME') && strlen(PROJECT_NAME) > 0 && class_exists(PROJECT_NAME . 'Configure')) { $ProjectConfigure = PROJECT_NAME . 'Configure'; if (NULL !== $ProjectConfigure::constant('DB_DSN')) { // 定義からセッションDBの接続情報を特定 $DSN = $ProjectConfigure::DB_DSN; } if (NULL !== $ProjectConfigure::constant('SESSION_DB_DSN')) { // 定義からセッションDBの接続情報を特定 $DSN = $ProjectConfigure::SESSION_DB_DSN; } if (NULL !== $ProjectConfigure::constant('SESSION_EXPIRED_TIME')) { // 定義からセッションの有効期限を設定 $expiredtime = $ProjectConfigure::SESSION_EXPIRED_TIME; } if (NULL !== $ProjectConfigure::constant('SESSION_TBL_NAME')) { // 定義からセッションテーブル名を特定 self::$_sessionTblName = $ProjectConfigure::SESSION_TBL_NAME; } if (NULL !== $ProjectConfigure::constant('SESSION_TBL_PKEY_NAME')) { // 定義からセッションテーブルのPKey名を特定 self::$_sessionPKeyName = $ProjectConfigure::SESSION_TBL_PKEY_NAME; } if (NULL !== $ProjectConfigure::constant('SESSION_DATE_KEY_NAME')) { // 定義から日時フィールド名を特定 self::$_sessionDateKeyName = $ProjectConfigure::SESSION_DATE_KEY_NAME; } if (NULL !== $ProjectConfigure::constant('CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_cryptKey = $ProjectConfigure::CRYPT_KEY; } if (NULL !== $ProjectConfigure::constant('NETWORK_CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_cryptKey = $ProjectConfigure::NETWORK_CRYPT_KEY; } if (NULL !== $ProjectConfigure::constant('SESSION_CRYPT_KEY')) { // 定義から暗号化キーを設定 self::$_cryptKey = $ProjectConfigure::SESSION_CRYPT_KEY; } if (NULL !== $ProjectConfigure::constant('CRYPT_IV')) { // 定義から暗号化IVを設定 self::$_cryptIV = $ProjectConfigure::CRYPT_IV; } if (NULL !== $ProjectConfigure::constant('NETWORK_CRYPT_IV')) { // 定義から暗号化IVを設定 self::$_cryptIV = $ProjectConfigure::NETWORK_CRYPT_IV; } if (NULL !== $ProjectConfigure::constant('SESSION_CRYPT_IV')) { // 定義から暗号化IVを設定 self::$_cryptIV = $ProjectConfigure::SESSION_CRYPT_IV; } } // DBOを初期化 if (NULL === self::$_DBO) { if (NULL !== $argDSN) { // セッションDBの接続情報を直指定 $DSN = $argDSN; } self::$_DBO = DBO::sharedInstance($DSN); } // セッションの有効期限を設定 if (NULL !== $argExpiredtime) { // セッションの有効期限を直指定 $expiredtime = $argExpiredtime; } self::$_expiredtime = $expiredtime; // セッションデータクラスの初期化 parent::_init($expiredtime, $DSN); // 初期化済み self::$_initialized = TRUE; } }
/** * フレームワーク標準のAuth機能を利用した認証と登録を行って、RESTする(スマフォAPI向け) * @return array 配列構造のリソースデータ */ public function UIDAuthAndExecute() { $this->_init(); // UIDAuthREST用変数初期化 $DBO = NULL; $User = FALSE; $userModelName = NULL; $UserModelCreatedFieldName = NULL; $UserModelModifiedFieldName = NULL; $deviceTypeFieldName = NULL; if (class_exists('Configure') && NULL !== Configure::constant('REST_UIDAUTH_USER_TBL_NAME')) { $userModelName = Configure::REST_UIDAUTH_USER_TBL_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('REST_UIDAUTH_USER_CREATE_DATE_KEY_NAME')) { $UserModelCreatedFieldName = Configure::REST_UIDAUTH_USER_CREATE_DATE_KEY_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('REST_UIDAUTH_USER_MODIFY_DATE_KEY_NAME')) { $UserModelModifiedFieldName = Configure::REST_UIDAUTH_USER_MODIFY_DATE_KEY_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('REST_UIDAUTH_DEVICE_TYPE_FIELD_NAME')) { $deviceTypeFieldName = Configure::REST_UIDAUTH_DEVICE_TYPE_FIELD_NAME; } if (defined('PROJECT_NAME') && strlen(PROJECT_NAME) > 0 && class_exists(PROJECT_NAME . 'Configure')) { $ProjectConfigure = PROJECT_NAME . 'Configure'; if (NULL !== $ProjectConfigure::constant('REST_UIDAUTH_USER_TBL_NAME')) { $userModelName = $ProjectConfigure::REST_UIDAUTH_USER_TBL_NAME; } if (NULL !== $ProjectConfigure::constant('REST_UIDAUTH_USER_CREATE_DATE_KEY_NAME')) { $UserModelCreatedFieldName = $ProjectConfigure::REST_UIDAUTH_USER_CREATE_DATE_KEY_NAME; } if (NULL !== $ProjectConfigure::constant('REST_UIDAUTH_USER_MODIFY_DATE_KEY_NAME')) { $UserModelModifiedFieldName = $ProjectConfigure::REST_UIDAUTH_USER_MODIFY_DATE_KEY_NAME; } if (NULL !== $ProjectConfigure::constant('REST_UIDAUTH_DEVICE_TYPE_FIELD_NAME')) { $deviceTypeFieldName = $ProjectConfigure::REST_UIDAUTH_DEVICE_TYPE_FIELD_NAME; } } try { $gmtDate = Utilities::date('Y-m-d H:i:s', NULL, NULL, 'GMT'); $DBO = self::_getDBO(); // UIDAuth $Device = Auth::getCertifiedUser(); if (FALSE === $Device) { // 登録処理 // SessionID=端末固有IDと言う決めに沿って登録を行う $deviceID = Auth::getDecryptedAuthIdentifier(); debug('$deviceID=' . $deviceID); if (30 >= strlen($deviceID)) { // UIDエラー! 認証エラー throw new RESTException(__CLASS__ . PATH_SEPARATOR . __METHOD__ . PATH_SEPARATOR . __LINE__, 401); } $Device = Auth::registration($deviceID, $deviceID); // 強制認証で証明を得る if (TRUE !== Auth::certify($Device->{Auth::$authIDField}, $Device->{Auth::$authPassField}, NULL, TRUE)) { // 認証NG(401) throw new RESTException(__CLASS__ . PATH_SEPARATOR . __METHOD__ . PATH_SEPARATOR . __LINE__, 401); } // user情報の更新 $userAdded = FALSE; $deviceModified = FALSE; if (NULL !== $userModelName && $userModelName != $Device->tableName) { $ownerIDField = $userModelName . '_id'; if (isset($Device->{$this->authUserIDFieldName})) { $ownerIDField = $this->authUserIDFieldName; } if (!(0 < strlen($Device->{$ownerIDField}) && '0' != $Device->{$ownerIDField})) { // userテーブルとdeviceテーブルのテーブル名が違うので、userテーブルの保存を行う $User = self::_getModel($userModelName); if (NULL !== $UserModelCreatedFieldName && in_array($UserModelCreatedFieldName, $User->getFieldKeys())) { $User->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $UserModelCreatedFieldName)))}($gmtDate); } if (NULL !== $UserModelModifiedFieldName && in_array($UserModelModifiedFieldName, $User->getFieldKeys())) { $User->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $UserModelModifiedFieldName)))}($gmtDate); } $User->save(); // deviceテーブルにユーザーIDのセット(強制) $Device->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $ownerIDField)))}($User->pkey); $deviceModified = TRUE; $userAdded = TRUE; } else { $User = self::_getModel($userModelName, $Device->{$ownerIDField}); if (!(0 < (int) $User->pkey)) { // デバイスの持ち主が変わった可能性 $gmtDate = Utilities::date('Y-m-d H:i:s', NULL, NULL, 'GMT'); // userテーブルとdeviceテーブルのテーブル名が違うので、userテーブルの保存を行う if (NULL !== $UserModelCreatedFieldName && in_array($UserModelCreatedFieldName, $User->getFieldKeys())) { $User->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $UserModelCreatedFieldName)))}($gmtDate); } if (NULL !== $UserModelModifiedFieldName && in_array($UserModelModifiedFieldName, $User->getFieldKeys())) { $User->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $UserModelModifiedFieldName)))}($gmtDate); } $User->save(); // deviceテーブルにユーザーIDのセット(強制) $Device->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $ownerIDField)))}($User->pkey); $deviceModified = TRUE; $userAdded = TRUE; } } } else { $User = $Device; } // device情報の更新 if (NULL !== $deviceTypeFieldName && in_array($deviceTypeFieldName, $Device->getFieldKeys()) && isset($this->deviceType) && 0 < strlen($this->deviceType)) { $Device->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $deviceTypeFieldName)))}($this->deviceType); $deviceModified = TRUE; } if (TRUE === $deviceModified) { if (in_array(Auth::$authModifiedField, $Device->getFieldKeys())) { $Device->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', Auth::$authModifiedField)))}($gmtDate); } $Device->save(); } if (TRUE === $deviceModified || TRUE === $userAdded) { // 一旦コミット $DBO->commit(); } } elseif (NULL !== $userModelName && $userModelName != $Device->tableName) { $ownerIDField = $userModelName . '_id'; if (isset($Device->{$this->authUserIDFieldName})) { $ownerIDField = $this->authUserIDFieldName; } debug('is owner?' . $Device->{$ownerIDField}); if (!(0 < strlen($Device->{$ownerIDField}) && '0' != $Device->{$ownerIDField})) { // user情報の更新 // userテーブルとdeviceテーブルのテーブル名が違うので、userテーブルの保存を行う $User = self::_getModel($userModelName); if (NULL !== $UserModelCreatedFieldName && in_array($UserModelCreatedFieldName, $User->getFieldKeys())) { $User->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $UserModelCreatedFieldName)))}($gmtDate); } if (NULL !== $UserModelModifiedFieldName && in_array($UserModelModifiedFieldName, $User->getFieldKeys())) { $User->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $UserModelModifiedFieldName)))}($gmtDate); } $User->save(); // deviceテーブルにユーザーIDのセット(強制) $Device->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $ownerIDField)))}($User->pkey); if (NULL !== $deviceTypeFieldName && in_array($deviceTypeFieldName, $Device->getFieldKeys()) && isset($this->deviceType) && 0 < strlen($this->deviceType)) { $Device->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $deviceTypeFieldName)))}($this->deviceType); } if (in_array(Auth::$authModifiedField, $Device->getFieldKeys())) { $Device->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', Auth::$authModifiedField)))}($gmtDate); } $Device->save(); // 一旦コミット $DBO->commit(); } else { $User = self::_getModel($userModelName, $Device->{$ownerIDField}); if (!(0 < (int) $User->pkey)) { // デバイスの持ち主が変わった可能性 $gmtDate = Utilities::date('Y-m-d H:i:s', NULL, NULL, 'GMT'); // userテーブルとdeviceテーブルのテーブル名が違うので、userテーブルの保存を行う if (NULL !== $UserModelCreatedFieldName && in_array($UserModelCreatedFieldName, $User->getFieldKeys())) { $User->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $UserModelCreatedFieldName)))}($gmtDate); } if (NULL !== $UserModelModifiedFieldName && in_array($UserModelModifiedFieldName, $User->getFieldKeys())) { $User->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $UserModelModifiedFieldName)))}($gmtDate); } $User->save(); // deviceテーブルにユーザーIDのセット(強制) $Device->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $ownerIDField)))}($User->pkey); if (NULL !== $deviceTypeFieldName && in_array($deviceTypeFieldName, $Device->getFieldKeys()) && isset($this->deviceType) && 0 < strlen($this->deviceType)) { $Device->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $deviceTypeFieldName)))}($this->deviceType); } if (in_array(Auth::$authModifiedField, $Device->getFieldKeys())) { $Device->{'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', Auth::$authModifiedField)))}($gmtDate); } $Device->save(); // 一旦コミット $DBO->commit(); } } } else { $User = $Device; } } catch (Exception $Exception) { if (NULL !== $DBO && is_object($DBO)) { // トランザクションを異常終了する $DBO->rollback(); } // 実装の問題によるエラー $this->httpStatus = 500; if (400 === $Exception->getCode() || 401 === $Exception->getCode() || 404 === $Exception->getCode() || 405 === $Exception->getCode() || 503 === $Exception->getCode()) { $this->httpStatus = $Exception->getCode(); } throw new RESTException($Exception->getMessage(), $this->httpStatus); } $this->AuthDevice = $Device; if (FALSE !== $User) { // 認証OK $this->AuthUser = $User; $this->authUserID = $User->pkey; if (NULL === $this->authUserIDFieldName) { // XXX xxx_xxと言うAuthユーザー判定法は固定です!使用は任意になります。 $this->authUserIDFieldName = strtolower($User->tableName) . '_' . $User->pkeyName; } $this->authUserQuery = ' `' . $this->authUserIDFieldName . '` = \'' . $User->pkey . '\''; return $this->execute(); } // XXX ココを通るのは相当なイレギュラー! $this->httpStatus = 500; throw new RESTException(__CLASS__ . PATH_SEPARATOR . __METHOD__ . PATH_SEPARATOR . __LINE__, 500); }
/** * コンフィグレーションされている値を返す */ function getConfig($argKey, $argConfigName = '') { static $values = array(); $value = NULL; if (!isset($values[$argConfigName])) { $values[$argConfigName] = array(); } if (!isset($values[$argConfigName][$argKey])) { if (class_exists('Configure') && TRUE === defined('Configure::' . $argKey)) { // 定義から暗号化キーを設定 $value = Configure::constant($argKey); } if (defined('PROJECT_NAME') && strlen(PROJECT_NAME) > 0 && class_exists(PROJECT_NAME . 'Configure')) { $ProjectConfigure = PROJECT_NAME . 'Configure'; if (TRUE === defined($ProjectConfigure . '::' . $argKey)) { // 定義からセッションDBの接続情報を特定 $value = $ProjectConfigure::constant($argKey); } } if (!class_exists($argConfigName . 'Configure') && !class_exists($argConfigName) && !class_exists(str_replace('Package', '', $argConfigName))) { loadConfigForConfigName($argConfigName); } if ('' !== $argConfigName && strlen($argConfigName) > 0 && class_exists($argConfigName . 'Configure')) { $ArgConfigure = $argConfigName . 'Configure'; if (TRUE === defined($ArgConfigure . '::' . $argKey)) { // 定義からセッションDBの接続情報を特定 $value = $ArgConfigure::constant($argKey); } } if ('' !== $argConfigName && strlen($argConfigName) > 0 && class_exists($argConfigName)) { $ArgConfigure = $argConfigName; if (TRUE === defined($ArgConfigure . '::' . $argKey)) { // 定義からセッションDBの接続情報を特定 $value = $ArgConfigure::constant($argKey); } } $argConfigName = str_replace('Package', '', $argConfigName); if ('' !== $argConfigName && strlen($argConfigName) > 0 && class_exists($argConfigName . 'Configure')) { $ArgConfigure = $argConfigName . 'Configure'; if (TRUE === defined($ArgConfigure . '::' . $argKey)) { // 定義からセッションDBの接続情報を特定 $value = $ArgConfigure::constant($argKey); } } if ('' !== $argConfigName && strlen($argConfigName) > 0 && class_exists($argConfigName)) { $ArgConfigure = $argConfigName; if (TRUE === defined($ArgConfigure . '::' . $argKey)) { // 定義からセッションDBの接続情報を特定 $value = $ArgConfigure::constant($argKey); } } $values[$argConfigName][$argKey] = $value; } else { $value = $values[$argConfigName][$argKey]; } return $value; }
/** * MVCクラスモジュールの読み込み処理 * @param string クラス名 * @param string クラスの読み込事にエラーが在る場合にbooleanを返すかどうか * @param string クラスの読み込事にエラーが在る場合にbooleanを返すかどうか * @return mixed 成功時は対象のクラス名 失敗した場合はFALSEを返す */ public static function loadMVCModule($argClassName = NULL, $argClassExistsCalled = FALSE, $argTargetPath = '') { static $currentTargetPath = ''; $targetPath = ''; if (NULL !== $argClassName) { $controlerClassName = $argClassName; } else { // コントロール対象を自動特定 $controlerClassName = 'Index'; if (isset($_GET['_c_']) && strlen($_GET['_c_']) > 0) { $controlerClassName = str_replace('-', '_', ucfirst($_GET['_c_'])); if (FALSE !== strpos($_GET['_c_'], '/') && strlen($_GET['_c_']) > 1) { $matches = NULL; if (preg_match('/(.*)\\/([^\\/]*)$/', $_GET['_c_'], $matches) && is_array($matches) && isset($matches[2])) { $controlerClassName = str_replace('-', '_', ucfirst($matches[2])); if (isset($matches[1]) && strlen($matches[1]) > 0) { $targetPath = $matches[1] . '/'; if ('' === $currentTargetPath) { $currentTargetPath = $targetPath; } } } } } } if ('' !== $argTargetPath) { $targetPath = $argTargetPath; } if ('' === $targetPath) { $targetPath = $currentTargetPath; } $version = ''; if (isset($_GET['_v_']) && strlen($_GET['_v_']) > 0) { $version = $_GET['_v_']; } debug('path=' . $targetPath); debug('class=' . $controlerClassName); if (!class_exists($controlerClassName, FALSE)) { // コントローラを読み込み if ('' !== $version) { // バージョン一致のファイルを先ず走査する loadModule('default.controlmain.' . $targetPath . $version . '/' . $controlerClassName, TRUE); } if (!class_exists($controlerClassName, FALSE)) { loadModule('default.controlmain.' . $targetPath . $controlerClassName, TRUE); } if (!class_exists($controlerClassName, FALSE)) { loadModule('default.controlmain.' . $controlerClassName, TRUE); } if (class_exists($controlerClassName, FALSE)) { // FlowGenerateする必要がなさそうなのでココで終了 return $controlerClassName; } else { if ('' === self::$flowXMLBasePath) { // エラー終了 return FALSE; } else { // ココからはFlow処理 if (TRUE === self::$flowXMLBasePath) { // self::$flowXMLBasePathがTRUEとなっていた場合はConfigureにFLOWXML_PATH定義が無いか調べる if (class_exists('Configure', FALSE) && NULL !== Configure::constant('FLOWXML_PATH')) { self::$flowXMLBasePath = Configure::FLOWXML_PATH; } } // Flow出来ない! if ('' === self::$flowXMLBasePath) { // エラー終了 return FALSE; } // XML定義の存在チェック // クラス名は分解しておく $classHint = explode('_', $controlerClassName); debug($targetPath); debug($classHint); $classXMLName = $classHint[0]; debug($classXMLName); $flowXMLPath = ''; if ('' !== $version) { // バージョン一致のファイルを先ず走査する if (file_exists_ip(self::$flowXMLBasePath . '/' . $targetPath . $version . '/' . $classXMLName . '.flow.xml')) { $flowXMLPath = self::$flowXMLBasePath . '/' . $targetPath . $version . '/' . $classXMLName . '.flow.xml'; } } if ('' === $flowXMLPath) { // バージョン関係ナシのファイルを走査する if (file_exists_ip(self::$flowXMLBasePath . '/' . $targetPath . $classXMLName . '.flow.xml')) { $flowXMLPath = self::$flowXMLBasePath . '/' . $targetPath . $classXMLName . '.flow.xml'; } } debug($flowXMLPath); if ('' === $flowXMLPath) { // エラー終了 return FALSE; } // flowファイルの履歴を残しておく self::$flowXMLPaths[] = array('class' => $controlerClassName, 'xml' => $flowXMLPath); // Flowに応じたクラス定義の自動生成を委任 loadModule('Flow'); if (FALSE === Flow::generate($flowXMLPath, $controlerClassName, $targetPath)) { // エラー終了 return FALSE; } if (!class_exists($controlerClassName, FALSE)) { // エラー終了 return FALSE; } } } } return $controlerClassName; }
/** * Sessionクラスの初期化 * @param string セッションの有効期限 * @param string DBDSN情報 */ protected static function _init($argExpiredtime = NULL, $argDSN = NULL) { if (FALSE === self::$_initialized) { $DSN = NULL; $expiredtime = self::$_expiredtime; if (class_exists('Configure') && NULL !== Configure::constant('DB_DSN')) { // 定義からセッションDBの接続情報を特定 $DSN = Configure::DB_DSN; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_DB_DSN')) { // 定義からセッションDBの接続情報を特定 $DSN = Configure::DB_DSN; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_EXPIRED_TIME')) { // 定義からセッションの有効期限を設定 $expiredtime = Configure::SESSION_EXPIRED_TIME; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_DATA_TBL_NAME')) { // 定義からセッションデータテーブル名を特定 self::$_sessionDataTblName = $ProjectConfigure::SESSION_DATA_TBL_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_DATA_TBL_PKEY_NAME')) { // 定義からセッションデータテーブルのPKey名を特定 self::$_sessionDataPKeyName = Configure::SESSION_DATA_TBL_PKEY_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('SERIALIZE_KEY_NAME')) { // 定義からシリアライズデータのフィールド名を特定 self::$_serializeKeyName = Configure::SERIALIZE_KEY_NAME; } if (class_exists('Configure') && NULL !== Configure::constant('SESSION_DATA_DATE_KEY_NAME')) { // 定義から日時フィールド名を特定 self::$_sessionDataDateKeyName = Configure::SESSION_DATA_DATE_KEY_NAME; } if (defined('PROJECT_NAME') && strlen(PROJECT_NAME) > 0 && class_exists(PROJECT_NAME . 'Configure')) { $ProjectConfigure = PROJECT_NAME . 'Configure'; if (NULL !== $ProjectConfigure::constant('DB_DSN')) { // 定義からセッションDBの接続情報を特定 $DSN = $ProjectConfigure::DB_DSN; } if (NULL !== $ProjectConfigure::constant('SESSION_DB_DSN')) { // 定義からセッションDBの接続情報を特定 $DSN = $ProjectConfigure::SESSION_DB_DSN; } if (NULL !== $ProjectConfigure::constant('SESSION_EXPIRED_TIME')) { // 定義からセッションの有効期限を設定 $expiredtime = $ProjectConfigure::SESSION_EXPIRED_TIME; } if (NULL !== $ProjectConfigure::constant('SESSION_DATA_TBL_NAME')) { // 定義からセッションデータテーブル名を特定 self::$_sessionDataTblName = $ProjectConfigure::SESSION_DATA_TBL_NAME; } if (NULL !== $ProjectConfigure::constant('SESSION_DATA_TBL_PKEY_NAME')) { // 定義からセッションデータテーブルのPKey名を特定 self::$_sessionDataPKeyName = $ProjectConfigure::SESSION_DATA_TBL_PKEY_NAME; } if (NULL !== $ProjectConfigure::constant('SERIALIZE_KEY_NAME')) { // 定義からuserTable名を特定 self::$_serializeKeyName = $ProjectConfigure::SERIALIZE_KEY_NAME; } if (NULL !== $ProjectConfigure::constant('SESSION_DATA_DATE_KEY_NAME')) { // 定義から日時フィールド名を特定 self::$_sessionDataDateKeyName = $ProjectConfigure::SESSION_DATA_DATE_KEY_NAME; } } // DBOを初期化 if (NULL === self::$_DBO) { if (NULL !== $argDSN) { // セッションDBの接続情報を直指定 $DSN = $argDSN; } self::$_DBO = DBO::sharedInstance($DSN); } // セッションの有効期限を設定 if (NULL !== $argExpiredtime) { // セッションの有効期限を直指定 $expiredtime = $argExpiredtime; } self::$_expiredtime = $expiredtime; // 初期化済み self::$_initialized = TRUE; } }
/** * 該当get_called_classのDBインスタンスの初期化 */ private function _initDB() { $dsn = NULL; if (TRUE === @property_exists($this, "DSN") && isset($this->DSN) && NULL !== $this->DSN && strlen($this->DSN) > 0) { // 与えられたDSN情報を使用する $dsn = $this->DSN; $calledClassName = "default"; if (TRUE === @property_exists($this, "dbidentifykey")) { $this->dbidentifykey = $calledClassName; } } else { // フレームワークの機能を使ったDSNの自動解決処理 // 継承元クラス名を取得(静的クラス名を取るためにget_called_classを使用する) $calledClassName = @get_called_class(); if (0 == strlen($calledClassName)) { // もしもの時の為 $calledClassName = "default"; } // 継承元クラス名に応じたDSN定義を取得 $ProjectConfigure = NULL; if (defined('PROJECT_NAME') && strlen(PROJECT_NAME) > 0 && class_exists(PROJECT_NAME . 'Configure')) { $ProjectConfigure = PROJECT_NAME . 'Configure'; } if (NULL !== $ProjectConfigure && NULL !== $ProjectConfigure::constant('DB_DSN')) { $dsn = $ProjectConfigure::DB_DSN; } elseif (0 < strlen($calledClassName) && __CLASS__ != $calledClassName && class_exists("Configure") && NULL !== Configure::constant(strtoupper($calledClassName) . "_DSN")) { $dsn = Configure::constant(strtoupper($calledClassName) . "_DSN"); } elseif (class_exists("Configure") && NULL !== Configure::constant("DB_DSN")) { $dsn = Configure::DB_DSN; } else { // 定数を使う $dsn = DB_DSN; } if (TRUE === @property_exists($this, "DSN")) { $this->DSN = $dsn; } if (TRUE === @property_exists($this, "dbidentifykey")) { $this->dbidentifykey = $calledClassName; } } if (!(isset(self::$_DBInstance[$calledClassName]) && is_object(self::$_DBInstance[$calledClassName]))) { $DBInstance = ADONewConnection($dsn); self::$_DBInstance[$calledClassName] = TRUE; if (false === $DBInstance) { // DBインスタンス初期化エラー throw new Exception(__CLASS__ . PATH_SEPARATOR . __METHOD__ . PATH_SEPARATOR . __LINE__); } // XXX Pconnectの場合、直前のエラー終了プロセスのコネクションがコミットされずに残っていて // それを再利用してしまうケースがあるので、まず再利用コネクションをロールバックする事に注意!!! $DBInstance->RollbackTrans(); // インスタンスの保持 self::$_DBInstance[$calledClassName] = $DBInstance; self::$_DSN[$calledClassName] = $dsn; // MySQlはSET NAMES utf8する if (0 === strpos($dsn, 'mysql') && FALSE === self::$_DBInstance[$calledClassName]->Execute("SET NAMES utf8")) { throw new Exception(__CLASS__ . PATH_SEPARATOR . __METHOD__ . PATH_SEPARATOR . __LINE__); } // OracleはALTER SESSIONする if (0 === strpos($dsn, 'oci') && FALSE === self::$_DBInstance[$calledClassName]->Execute("ALTER SESSION SET NLS_DATE_FORMAT = 'yyyy-mm-dd hh24:mi:ss'")) { throw new Exception(__CLASS__ . PATH_SEPARATOR . __METHOD__ . PATH_SEPARATOR . __LINE__); } } return $calledClassName; }