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 @@
+
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);
}
/**