diff --git a/modules/admin/admin.admin.controller.php b/modules/admin/admin.admin.controller.php index a10bf611a..e9c802290 100644 --- a/modules/admin/admin.admin.controller.php +++ b/modules/admin/admin.admin.controller.php @@ -581,6 +581,7 @@ class adminAdminController extends admin // Validate the selected Push drivers. $push_config = array('types' => array()); + $push_config['allow_guest_device'] = $vars->allow_guest_device === 'Y' ? true : false; $push_drivers = Rhymix\Framework\Push::getSupportedDrivers(); $push_driver_list = $vars->push_driver ?: []; foreach ($push_driver_list as $driver_name) diff --git a/modules/admin/tpl/config_notification.html b/modules/admin/tpl/config_notification.html index 9f074e9ac..d8b88ef56 100644 --- a/modules/admin/tpl/config_notification.html +++ b/modules/admin/tpl/config_notification.html @@ -390,6 +390,22 @@ +
+ +
+ + +
+

{$lang->cmd_advanced_mailer_about_allow_guest_device}

+
+
+
diff --git a/modules/advanced_mailer/lang/en.php b/modules/advanced_mailer/lang/en.php index c57035f64..27158390a 100644 --- a/modules/advanced_mailer/lang/en.php +++ b/modules/advanced_mailer/lang/en.php @@ -40,6 +40,8 @@ $lang->cmd_advanced_mailer_api_pass = 'Password'; $lang->cmd_advanced_mailer_fcm_api_key = 'FCM API key'; $lang->cmd_advanced_mailer_apns_certificate = 'APNs certificate file'; $lang->cmd_advanced_mailer_apns_passphrase = 'APNs certificate passphrase'; +$lang->cmd_advanced_mailer_allow_guest_device = 'Register Guest Devices'; +$lang->cmd_advanced_mailer_about_allow_guest_device = 'Accept device registrations from users who are not logged in.'; $lang->cmd_advanced_mailer_sender_key = 'Sender key'; $lang->cmd_advanced_mailer_sender_identity = 'Sender Identity'; $lang->cmd_advanced_mailer_about_sender_identity = 'You can change the sender\'s name and e-mail address in the Notification Settings screen.'; diff --git a/modules/advanced_mailer/lang/ko.php b/modules/advanced_mailer/lang/ko.php index 7400b4550..dba56c8ea 100644 --- a/modules/advanced_mailer/lang/ko.php +++ b/modules/advanced_mailer/lang/ko.php @@ -40,6 +40,8 @@ $lang->cmd_advanced_mailer_api_pass = '비밀번호'; $lang->cmd_advanced_mailer_fcm_api_key = 'FCM API 키'; $lang->cmd_advanced_mailer_apns_certificate = 'APNs 인증서 파일'; $lang->cmd_advanced_mailer_apns_passphrase = 'APNs 인증서 암호'; +$lang->cmd_advanced_mailer_allow_guest_device = '비회원 기기 등록'; +$lang->cmd_advanced_mailer_about_allow_guest_device = '로그인하지 않은 사용자도 기기를 등록할 수 있도록 허용합니다.'; $lang->cmd_advanced_mailer_sender_key = '센더 키'; $lang->cmd_advanced_mailer_sender_identity = '보낸이 설정'; $lang->cmd_advanced_mailer_about_sender_identity = '보낸이의 이름과 메일 주소는 알림 설정 화면에서 변경할 수 있습니다.'; diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index bdf9b36f3..d4e394f78 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -88,14 +88,15 @@ class memberController extends member Context::setResponseMethod('JSON'); // Check user_id, password, device_token + $allow_guest_device = config('push.allow_guest_device'); $user_id = Context::get('user_id'); $password = Context::get('password'); $device_token = Context::get('device_token'); $device_model = escape(Context::get('device_model')); // Return an error when id and password doesn't exist - if(!$user_id) return new BaseObject(-1, 'NULL_USER_ID'); - if(!$password) return new BaseObject(-1, 'NULL_PASSWORD'); + if(!$user_id && !$allow_guest_device) return new BaseObject(-1, 'NULL_USER_ID'); + if(!$password && !$allow_guest_device) return new BaseObject(-1, 'NULL_PASSWORD'); if(!$device_token) return new BaseObject(-1, 'NULL_DEVICE_TOKEN'); $browserInfo = Rhymix\Framework\UA::getBrowserInfo(); @@ -113,7 +114,7 @@ class memberController extends member return new BaseObject(-1, 'INVALID_DEVICE_TOKEN'); } } - else if('android' === $device_type) + elseif('android' === $device_type) { if(!preg_match("/^[0-9a-zA-Z:_-]+$/", $device_token)) { @@ -125,15 +126,24 @@ class memberController extends member return new BaseObject(-1, 'NOT_SUPPORTED_OS'); } - $output = $this->procMemberLogin($user_id, $password); - if(!$output->toBool()) + if($user_id && $password) { - return new BaseObject(-1, 'LOGIN_FAILED'); + $output = $this->procMemberLogin($user_id, $password); + if(!$output->toBool()) + { + return new BaseObject(-1, 'LOGIN_FAILED'); + } + $logged_info = Context::get('logged_info'); + $member_srl = intval($logged_info->member_srl); + } + else + { + $logged_info = null; + $member_srl = 0; } - $logged_info = Context::get('logged_info'); $random_key = Rhymix\Framework\Security::getRandom(); - $device_key = hash_hmac('sha256', $random_key, $logged_info->member_srl . ':' . config('crypto.authentication_key')); + $device_key = hash_hmac('sha256', $random_key, $member_srl . ':' . config('crypto.authentication_key')); // Start transaction $oDB = DB::getInstance(); @@ -147,7 +157,7 @@ class memberController extends member // Create member_device $args = new stdClass; $args->device_srl = getNextSequence(); - $args->member_srl = $logged_info->member_srl; + $args->member_srl = $member_srl; $args->device_token = $device_token; $args->device_key = $device_key; $args->device_type = $device_type; @@ -163,10 +173,10 @@ class memberController extends member $oDB->commit(); // Set parameters - $this->add('member_srl', $logged_info->member_srl); - $this->add('user_id', $logged_info->user_id); - $this->add('user_name', $logged_info->user_name); - $this->add('nick_name', $logged_info->nick_name); + $this->add('member_srl', $member_srl); + $this->add('user_id', $logged_info ? $logged_info->user_id : null); + $this->add('user_name', $logged_info ? $logged_info->user_name : null); + $this->add('nick_name', $logged_info ? $logged_info->nick_name : null); $this->add('device_key', $random_key); } @@ -176,13 +186,15 @@ class memberController extends member function procMemberLoginWithDevice() { Context::setResponseMethod('JSON'); + // Check member_srl, device_token, device_key - $member_srl = Context::get('member_srl'); + $allow_guest_device = config('push.allow_guest_device'); + $member_srl = intval(Context::get('member_srl')); $device_token = Context::get('device_token'); $random_key = Context::get('device_key'); // Return an error when id, password and device_key doesn't exist - if(!$member_srl) return new BaseObject(-1, 'NULL_MEMBER_SRL'); + if(!$member_srl && !$allow_guest_device) return new BaseObject(-1, 'NULL_MEMBER_SRL'); if(!$device_token) return new BaseObject(-1, 'NULL_DEVICE_TOKEN'); if(!$random_key) return new BaseObject(-1, 'NULL_DEVICE_KEY'); @@ -202,17 +214,24 @@ class memberController extends member } // Log-in - $member_info = MemberModel::getMemberInfoByMemberSrl($member_srl); - $output = $this->doLogin($member_info->user_id); - if(!$output->toBool()) + if($member_srl) { - return new BaseObject(-1, 'LOGIN_FAILED'); + $member_info = MemberModel::getMemberInfoByMemberSrl($member_srl); + $output = $this->doLogin($member_info->user_id); + if(!$output->toBool()) + { + return new BaseObject(-1, 'LOGIN_FAILED'); + } } - - $this->add('member_srl', $member_info->member_srl); - $this->add('user_id', $member_info->user_id); - $this->add('user_name', $member_info->user_name); - $this->add('nick_name', $member_info->nick_name); + else + { + $member_info = null; + } + + $this->add('member_srl', $member_srl); + $this->add('user_id', $member_info ? $member_info->user_id : null); + $this->add('user_name', $member_info ? $member_info->user_name : null); + $this->add('nick_name', $member_info ? $member_info->nick_name : null); } /**