diff --git a/src/images/pages/warning_scam_message/ic-account-cross.svg b/src/images/pages/warning_scam_message/ic-account-cross.svg
new file mode 100644
index 0000000000000..81fa18c776a0e
--- /dev/null
+++ b/src/images/pages/warning_scam_message/ic-account-cross.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/images/pages/warning_scam_message/ic-account-dont-get-scam.svg b/src/images/pages/warning_scam_message/ic-account-dont-get-scam.svg
new file mode 100644
index 0000000000000..fea9213e32c2d
--- /dev/null
+++ b/src/images/pages/warning_scam_message/ic-account-dont-get-scam.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/images/pages/warning_scam_message/ic-account-tick.svg b/src/images/pages/warning_scam_message/ic-account-tick.svg
new file mode 100644
index 0000000000000..8b79910ac316f
--- /dev/null
+++ b/src/images/pages/warning_scam_message/ic-account-tick.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/javascript/app/base/client.js b/src/javascript/app/base/client.js
index d061e9de41e97..f7e5ed2df5a50 100644
--- a/src/javascript/app/base/client.js
+++ b/src/javascript/app/base/client.js
@@ -120,6 +120,9 @@ const Client = (() => {
if (response.logout !== 1) return;
removeCookies('login', 'loginid', 'loginid_list', 'email', 'residence', 'settings'); // backward compatibility
removeCookies('reality_check', 'affiliate_token', 'affiliate_tracking', 'onfido_token', 'hide_guide');
+ // clear local storage
+ localStorage.removeItem('read_scam_message');
+ localStorage.removeItem('new_user_account');
// clear elev.io session storage
sessionStorage.removeItem('_elevaddon-6app');
sessionStorage.removeItem('_elevaddon-6create');
diff --git a/src/javascript/app/base/page.js b/src/javascript/app/base/page.js
index d9a9222d45984..98c46ffe50881 100644
--- a/src/javascript/app/base/page.js
+++ b/src/javascript/app/base/page.js
@@ -1,37 +1,38 @@
-const Cookies = require('js-cookie');
-const moment = require('moment');
-const Client = require('./client');
-const Contents = require('./contents');
-const Header = require('./header');
-const Footer = require('./footer');
-const Menu = require('./menu');
-const BinarySocket = require('./socket');
-const TrafficSource = require('../common/traffic_source');
-const RealityCheck = require('../pages/user/reality_check/reality_check');
-const Login = require('../../_common/base/login');
-const ClientBase = require('../../_common/base/client_base');
-const elementInnerHtml = require('../../_common/common_functions').elementInnerHtml;
-const getElementById = require('../../_common/common_functions').getElementById;
-const Crowdin = require('../../_common/crowdin');
-const GTM = require('../../_common/gtm');
-const Language = require('../../_common/language');
-const PushNotification = require('../../_common/lib/push_notification');
-const localize = require('../../_common/localize').localize;
-const isMobile = require('../../_common/os_detect').isMobile;
-const LocalStore = require('../../_common/storage').LocalStore;
-const State = require('../../_common/storage').State;
-const scrollToTop = require('../../_common/scroll').scrollToTop;
-const toISOFormat = require('../../_common/string_util').toISOFormat;
-const Url = require('../../_common/url');
-const createElement = require('../../_common/utility').createElement;
-const isLoginPages = require('../../_common/utility').isLoginPages;
-const isProduction = require('../../config').isProduction;
-const ClosePopup = require('../common/game_close_popup');
-const EuClosePopup = require('../common/eu_close_popup');
-const EuCloseBanner = require('../common/eu_close_baner');
-const CloseBanner = require('../common/game_close_banner');
-const RedirectBanner = require('../common/redirect_banner');
-const DerivBanner = require('../common/deriv_banner');
+const Cookies = require('js-cookie');
+const moment = require('moment');
+const Client = require('./client');
+const Contents = require('./contents');
+const Header = require('./header');
+const Footer = require('./footer');
+const Menu = require('./menu');
+const BinarySocket = require('./socket');
+const TrafficSource = require('../common/traffic_source');
+const RealityCheck = require('../pages/user/reality_check/reality_check');
+const Login = require('../../_common/base/login');
+const ClientBase = require('../../_common/base/client_base');
+const elementInnerHtml = require('../../_common/common_functions').elementInnerHtml;
+const getElementById = require('../../_common/common_functions').getElementById;
+const Crowdin = require('../../_common/crowdin');
+const GTM = require('../../_common/gtm');
+const Language = require('../../_common/language');
+const PushNotification = require('../../_common/lib/push_notification');
+const localize = require('../../_common/localize').localize;
+const isMobile = require('../../_common/os_detect').isMobile;
+const LocalStore = require('../../_common/storage').LocalStore;
+const State = require('../../_common/storage').State;
+const scrollToTop = require('../../_common/scroll').scrollToTop;
+const toISOFormat = require('../../_common/string_util').toISOFormat;
+const Url = require('../../_common/url');
+const createElement = require('../../_common/utility').createElement;
+const isLoginPages = require('../../_common/utility').isLoginPages;
+const isProduction = require('../../config').isProduction;
+const WarningScamMessage = require('../pages/user/warning_scam_message');
+const ClosePopup = require('../common/game_close_popup');
+const EuClosePopup = require('../common/eu_close_popup');
+const EuCloseBanner = require('../common/eu_close_baner');
+const CloseBanner = require('../common/game_close_banner');
+const RedirectBanner = require('../common/redirect_banner');
+const DerivBanner = require('../common/deriv_banner');
const { removeLoadingImage } = require('../../_common/utility');
require('../../_common/lib/polyfills/array.includes');
require('../../_common/lib/polyfills/string.includes');
@@ -128,6 +129,8 @@ const Page = (() => {
}, 1000);
RealityCheck.onLoad();
Menu.init();
+ const is_brazil_client = State.getResponse('website_status.clients_country') === 'br';
+ const read_scam_message = localStorage.getItem('read_scam_message') || false;
const is_uk_residence = (Client.get('residence') === 'gb' || State.getResponse('website_status.clients_country') === 'gb');
const is_iom_client = (Client.get('residence') === 'im' || State.getResponse('website_status.clients_country') === 'im');
const is_be_client = (Client.get('residence') === 'be' || State.getResponse('website_status.clients_country') === 'be') && Client.hasAccountType('gaming');
@@ -135,6 +138,7 @@ const Page = (() => {
const mlt_check = ClientBase.get('landing_company_shortcode') === 'malta';
const mf_check = ClientBase.get('landing_company_shortcode') === 'maltainvest';
const virtual_account = Client.get('landing_company_shortcode') === 'virtual';
+ if (is_brazil_client && !read_scam_message) { WarningScamMessage.has_read_warning_scam_message(); }
if (!is_iom_client || is_uk_residence && !Client.hasAccountType('gaming') || mf_check || mlt_check) RedirectBanner.loginOnLoad();
if (is_uk_residence && Client.hasAccountType('gaming')) {
CloseBanner.onLoad();
diff --git a/src/javascript/app/pages/user/warning_scam_message.js b/src/javascript/app/pages/user/warning_scam_message.js
new file mode 100644
index 0000000000000..c6df8dbde6b2c
--- /dev/null
+++ b/src/javascript/app/pages/user/warning_scam_message.js
@@ -0,0 +1,50 @@
+const getElementById = require('../../../_common/common_functions').getElementById;
+const BinarySocket = require('../../base/socket');
+const Client = require('../../base/client');
+const State = require('../../../_common/storage').State;
+
+const WarningScamMessage = (()=>{
+ const urlParams = new URLSearchParams(window.location.search);
+ const actionParams = urlParams.get('action');
+ let warning_scam_message, warning_scam_message_button, warning_scam_message_checkbox;
+
+ if (actionParams === 'signup') {
+ localStorage.setItem('new_user_account', true);
+ }
+
+ const has_read_warning_scam_message = () => {
+ BinarySocket.wait('authorize', 'website_status').then(()=> {
+ const is_logged_in = !!Client.isLoggedIn();
+ const is_brazil = State.getResponse('website_status.clients_country') === 'br';
+ const is_message_read = !!localStorage.getItem('read_scam_message');
+ const is_new_account = !!localStorage.getItem('new_user_account');
+
+ if (is_logged_in && is_brazil && !is_message_read && !is_new_account) {
+ warning_scam_message = getElementById('warning_scam_message');
+ warning_scam_message_checkbox = getElementById('warning_scam_message_checkbox');
+ }
+ warning_scam_message.setVisibility(1);
+ warning_scam_message_checkbox.addEventListener('change', acknowledgeMessage);
+ });
+ };
+
+ const acknowledgeMessage = () => {
+ warning_scam_message_button = getElementById('warning_scam_message_button');
+ if (warning_scam_message_button.classList.contains('button-disabled')) {
+ warning_scam_message_button.classList.remove('button-disabled');
+ } else {
+ warning_scam_message_button.classList.add('button-disabled');
+ }
+
+ warning_scam_message_button.addEventListener('click',closePopup);
+ };
+
+ const closePopup = () => {
+ localStorage.setItem('read_scam_message', true);
+ warning_scam_message.setVisibility(0);
+ };
+
+ return { has_read_warning_scam_message, acknowledgeMessage, closePopup };
+})();
+
+module.exports = WarningScamMessage;
diff --git a/src/sass/static/pages.scss b/src/sass/static/pages.scss
index db705ca3c1bf2..2d01435a7d9e6 100644
--- a/src/sass/static/pages.scss
+++ b/src/sass/static/pages.scss
@@ -843,6 +843,124 @@ body #not_authenticated_financial ul.checked > li {
}
}
+.lightbox .warning-scam-message-content {
+ padding: 25px;
+ padding-bottom: 20px;
+
+ .warning-scam-message-title {
+ @media (min-width: 320px) and (max-width: 767px) {
+ font-size: 20px;
+ margin-bottom: 8px;
+ }
+ }
+ .warning-scam-message-subtitle {
+ @media (min-width: 320px) and (max-width: 767px) {
+ font-size: 14px;
+ }
+ }
+ .warning-scam-message-title-secondary {
+ color: $COLOR_BLACK;
+ @media (min-width: 320px) and (max-width: 767px) {
+ font-size: 18px;
+ margin-bottom: 8px;
+ }
+ }
+ .warning-scam-message-text-secondary {
+ font-size: 16px;
+ margin-bottom: 24px;
+ @media (min-width: 320px) and (max-width: 767px) {
+ font-size: 14px;
+ }
+ }
+ .warning-scam-message-info-message {
+ display: flex;
+ padding-left: 16px;
+ margin-bottom: 24px;
+ }
+ .warning-scam-message-content-info-message {
+ display: flex;
+ padding-left: 8px;
+ margin-bottom: 24px;
+ }
+ .warning-scam-message-scam-title-text {
+ font-weight: 300;
+ margin-bottom: 0;
+ color: $COLOR_BLACK;
+ @media (min-width: 320px) and (max-width: 767px) {
+ font-size: 16px;
+ }
+ }
+ .warning-scam-message-correct-content {
+ display: flex;
+ border: solid $COLOR_GREEN;
+ border-radius: 4px;
+ padding: 16px 8px;
+ margin-bottom: 24px;
+ flex-direction: column;
+ justify-content: center;
+ @media (min-width: 320px) and (max-width: 767px) {
+ padding: 22px 8px;
+ }
+ }
+ .warning-scam-message-wrong-content {
+ display: flex;
+ border: solid $COLOR_RED;
+ border-radius: 4px;
+ padding: 16px 8px;
+ margin-bottom: 24px;
+ flex-direction: column;
+ justify-content: center;
+ @media (min-width: 320px) and (max-width: 767px) {
+ padding: 22px 8px;
+ }
+ }
+ .warning-scam-message-link-container {
+ display: flex;
+ margin-left: 24px;
+ border-radius: 4px;
+ border: solid $COLOR_GRAY_SHADE;
+ background-color: $COLOR_LIGHT_GRAY;
+ justify-content: center;
+ align-items: center;
+ }
+ .warning-scam-message-link {
+ margin: 8px 0;
+ @media (min-width: 320px) and (max-width: 767px) {
+ font-size: 16px;
+ }
+ }
+ .warning-scam-message-checkbox-container {
+ display: flex;
+ }
+ .warning-scam-message-button-icon-container {
+ padding: 24px;
+ display: flex;
+ justify-content: space-between;
+ @media (min-width: 320px) and (max-width: 767px) {
+ padding-top: 40px;
+ flex-direction: column-reverse;
+ align-items: center;
+ justify-content: center;
+ }
+ }
+ #warning_scam_message_button {
+ margin-bottom: 0;
+ @media (min-width: 320px) and (max-width: 767px) {
+ margin-bottom: 24px;
+ }
+ }
+ .warning-scam-message-acknowledge-message {
+ @media (min-width: 320px) and (max-width: 767px) {
+ font-size: 14px;
+ }
+ }
+ .icon-sm {
+ height: 16px;
+ width: 16px;
+ margin: 3px 8px 0 0;
+ }
+}
+
.lightbox #set_currency {
padding: 25px;
padding-bottom: 20px;
diff --git a/src/templates/_common/_layout/layout.jsx b/src/templates/_common/_layout/layout.jsx
index 1f6ef4aa3001c..56af2f8e95555 100644
--- a/src/templates/_common/_layout/layout.jsx
+++ b/src/templates/_common/_layout/layout.jsx
@@ -13,6 +13,7 @@ import GameCloseBanner from '../components/game_close_banner.jsx';
import GameCloseBannerIom from '../components/game_close_banner_iom.jsx';
import EuCloseBanner from '../components/eu_close_banner.jsx';
import EuClosePopup from '../components/eu_close_popup.jsx';
+import WarningScamMessage from '../../app/user/warning_scam_message.jsx';
import RedirectBanner from '../components/EU_UK_redirect_banner.jsx';
export const CONTENT_PLACEHOLDER = 'CONTENT_PLACEHOLDER';
@@ -71,6 +72,7 @@ const Layout = () => {
+