Skip to content

Commit

Permalink
autoRegister backwards compatibility: for http always show slidedown …
Browse files Browse the repository at this point in the history
…and native for https
  • Loading branch information
itrush committed Mar 12, 2019
1 parent 0660c50 commit 3fd921d
Show file tree
Hide file tree
Showing 3 changed files with 203 additions and 51 deletions.
55 changes: 45 additions & 10 deletions src/helpers/ConfigHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,24 @@ export class ConfigHelper {

public static getMergedConfig(userConfig: AppUserConfig, serverConfig: ServerAppConfig): AppConfig {
const configIntegrationKind = this.getConfigIntegrationKind(serverConfig);

const subdomain = this.getSubdomainForConfigIntegrationKind(configIntegrationKind, userConfig, serverConfig);
const allowLocalhostAsSecureOrigin = (
serverConfig.config.setupBehavior ?
serverConfig.config.setupBehavior.allowLocalhostAsSecureOrigin :
userConfig.allowLocalhostAsSecureOrigin
);
const isUsingSubscriptionWorkaround = OneSignalUtils.internalIsUsingSubscriptionWorkaround(
subdomain,
allowLocalhostAsSecureOrigin
);

const mergedUserConfig = this.getUserConfigForConfigIntegrationKind(
configIntegrationKind, userConfig, serverConfig, isUsingSubscriptionWorkaround);

return {
appId: serverConfig.app_id,
subdomain: this.getSubdomainForConfigIntegrationKind(configIntegrationKind, userConfig, serverConfig),
subdomain,
origin: serverConfig.config.origin,
httpUseOneSignalCom: serverConfig.config.http_use_onesignal_com,
cookieSyncEnabled: serverConfig.features.cookie_sync.enable,
Expand All @@ -96,7 +111,7 @@ export class ConfigHelper {
vapidPublicKey: serverConfig.config.vapid_public_key,
onesignalVapidPublicKey: serverConfig.config.onesignal_vapid_public_key,
emailAuthRequired: serverConfig.features.email && serverConfig.features.email.require_auth,
userConfig: this.getUserConfigForConfigIntegrationKind(configIntegrationKind, userConfig, serverConfig),
userConfig: mergedUserConfig,
enableOnSession: serverConfig.features.enable_on_session || false,
};
}
Expand Down Expand Up @@ -152,7 +167,8 @@ export class ConfigHelper {
public static injectDefaultsIntoPromptOptions(
promptOptions: AppUserConfigPromptOptions | undefined,
defaultsFromServer: ServerAppConfigPrompt,
wholeUserConfig: AppUserConfig
wholeUserConfig: AppUserConfig,
isUsingSubscriptionWorkaround: boolean = false,
): AppUserConfigPromptOptions | undefined {

let customlinkUser: AppUserConfigCustomLinkOptions = { enabled: false };
Expand Down Expand Up @@ -201,18 +217,35 @@ export class ConfigHelper {
promptOptionsConfig.native.autoPrompt = promptOptionsConfig.native.hasOwnProperty("autoPrompt") ?
!!promptOptionsConfig.native.enabled && !!promptOptionsConfig.native.autoPrompt :
!!promptOptionsConfig.native.enabled;
} else if (wholeUserConfig.autoRegister) {
promptOptionsConfig.native = {
enabled: !(promptOptionsConfig.slidedown.enabled && promptOptionsConfig.slidedown.autoPrompt),
autoPrompt: !(promptOptionsConfig.slidedown.enabled && promptOptionsConfig.slidedown.autoPrompt),
}
} else {
promptOptionsConfig.native = {
enabled: false,
autoPrompt: false,
}
}

/**
* If autoRegister is true, show native prompt for https and slidedown for http ignoring any other related
* prompt options.
*/
if (wholeUserConfig.autoRegister === true) {
if (isUsingSubscriptionWorkaround) {
// disable native prompt
promptOptionsConfig.native.enabled = false;
promptOptionsConfig.native.autoPrompt = false;

// enable slidedown & make it autoPrompt
promptOptionsConfig.slidedown.enabled = true;
promptOptionsConfig.slidedown.autoPrompt = true;
} else {
//enable native prompt & make it autoPrompt
promptOptionsConfig.native.enabled = true;
promptOptionsConfig.native.autoPrompt = true;

//leave slidedown settings without change
}
}

promptOptionsConfig.autoPrompt = promptOptionsConfig.native.autoPrompt ||
promptOptionsConfig.slidedown.autoPrompt;

Expand Down Expand Up @@ -259,7 +292,8 @@ export class ConfigHelper {
public static getUserConfigForConfigIntegrationKind(
configIntegrationKind: ConfigIntegrationKind,
userConfig: AppUserConfig,
serverConfig: ServerAppConfig
serverConfig: ServerAppConfig,
isUsingSubscriptionWorkaround: boolean = false,
): AppUserConfig {
const integrationCapabilities = this.getIntegrationCapabilities(configIntegrationKind);
switch (integrationCapabilities.configuration) {
Expand Down Expand Up @@ -356,7 +390,8 @@ export class ConfigHelper {
promptOptions: this.injectDefaultsIntoPromptOptions(
userConfig.promptOptions,
serverConfig.config.staticPrompts,
userConfig
userConfig,
isUsingSubscriptionWorkaround
),
...{
serviceWorkerParam: typeof OneSignal !== 'undefined' && !!OneSignal.SERVICE_WORKER_PARAM
Expand Down
20 changes: 18 additions & 2 deletions src/utils/OneSignalUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,30 @@ export class OneSignalUtils {
return false;
}

if (OneSignalUtils.isLocalhostAllowedAsSecureOrigin() &&
const allowLocalhostAsSecureOrigin: boolean = this.isLocalhostAllowedAsSecureOrigin();

return OneSignalUtils.internalIsUsingSubscriptionWorkaround(
OneSignal.config.subdomain, allowLocalhostAsSecureOrigin
);
}

public static internalIsUsingSubscriptionWorkaround(
subdomain: string | undefined,
allowLocalhostAsSecureOrigin: boolean | undefined
): boolean {
if (bowser.safari) {
return false;
}

if (allowLocalhostAsSecureOrigin === true &&
(location.hostname === "localhost" || location.hostname === "127.0.0.1")) {
return false;
}

const windowEnv = SdkEnvironment.getWindowEnv();
return (
(windowEnv === WindowEnvironmentKind.Host || windowEnv === WindowEnvironmentKind.CustomIframe) &&
(!!OneSignal.config.subdomain || location.protocol === "http:")
(!!subdomain || location.protocol === "http:")
);
}

Expand Down
Loading

0 comments on commit 3fd921d

Please sign in to comment.