{"version":3,"sources":["components/api-authorization/ApiAuthorizationConstants.js","components/api-authorization/AuthorizeService.js","components/api-authorization/LoginMenu.js","components/NavMenu.js","components/Layout.js","components/Home.js","ServiceProviders/AdLinkServiceProvider.js","ServiceProviders/AdLinkTypeServiceProvider.js","ServiceProviders/CampaignServiceProvider.js","components/campaign/EditCampaign.js","components/shared/LoadingSpinner.js","components/campaign/ListCampaigns.js","components/api-authorization/AuthorizeRoute.js","components/api-authorization/Login.js","components/api-authorization/Logout.js","components/api-authorization/ApiAuthorizationRoutes.js","App.js","index.js"],"names":["QueryParameterNames","LogoutActions","LoginActions","prefix","ApplicationPaths","DefaultLoginRedirectPath","ApiAuthorizationClientConfigurationUrl","ApiAuthorizationPrefix","Login","LoginFailed","LoginCallback","Register","Profile","LogOut","LoggedOut","LogOutCallback","IdentityRegisterPath","IdentityManagePath","authService","_callbacks","_nextSubscriptionId","_user","_isAuthenticated","_popUpDisabled","this","getUser","user","profile","ensureUserManagerInitialized","userManager","access_token","state","signinSilent","createArguments","silentUser","updateState","success","console","log","Error","signinPopup","popUpUser","message","error","signinRedirect","redirect","url","signinCallback","signoutPopup","undefined","signoutRedirect","signoutCallback","response","data","notifySubscribers","callback","push","subscription","subscriptionId","subscriptionIndex","map","element","index","found","filter","length","splice","i","useReplaceToNavigate","status","AuthenticationResultStatus","Fail","Success","Redirect","fetch","ok","json","settings","automaticSilentRenew","includeIdTokenInSilentRenew","userStore","WebStorageStateStore","UserManager","events","addUserSignedOut","a","removeUser","LoginMenu","props","isAuthenticated","userName","_subscription","subscribe","populateState","unsubscribe","Promise","all","setState","name","profilePath","logoutPath","pathname","local","authenticatedView","registerPath","loginPath","anonymousView","NavItem","NavLink","tag","Link","className","to","Component","NavMenu","toggleNavbar","bind","collapsed","Navbar","light","Container","NavbarBrand","NavbarToggler","onClick","Collapse","isOpen","navbar","displayName","Layout","children","Home","AdLinkServiceProvider","adLink","getAccessToken","token","JSON","stringify","axios","post","headers","Authorization","campaignId","AD_LINK_API_BASE_URL","AdLinkTypeServiceProvider","get","CampaignServiceProvider","campaign","CreatedByUserId","sub","CAMPAIGN_API_BASE_URL","baseProductUrl","baseTargetUrl","adLinkTypeId","linkJson","AdLinkTypeId","BaseProductUrl","BaseTargetUrl","CampaignId","result","long_url","targetUrl","BITLY_API_BASE_URL","authToken","bitlyResult","product_url","productUrl","target_url","EditCampaign","saveOrUpdateCampaign","event","preventDefault","id","campaignStatusId","createOrUpdateCampaign","then","res","history","alert","changeCampaignBaseProductUrlHandler","target","value","changeCampaignBaseTargetUrlHandler","changeCampaignNameHandler","generateShortLink","currentTarget","getAttribute","adLinkName","generateBitlyLink","createdByUserId","linkStatisticsId","shortUrl","link","adLinks","createAdLink","adLinkTypes","match","params","isEditable","campaignStatuses","getAdLinkTypes","getCampaignStatuses","getCampaignAdLinks","getCampaignById","adLinkType","some","find","data-ad-link-type-id","data-ad-link-name","isAdd","getTitle","type","placeholder","onChange","disabled","e","campaignStatus","key","getAdLinkTypeButton","cancel","style","marginLeft","LoadingSpinner","ListCampaigns","campaigns","loading","addCampaign","editCampaign","deleteCampaign","window","confirm","getCampaigns","width","AuthorizeRoute","ready","authenticated","authenticationChanged","populateAuthenticationState","document","createElement","href","path","returnUrl","protocol","host","search","hash","redirectUrl","encodeURIComponent","component","rest","render","action","login","getReturnUrl","processLoginCallback","URLSearchParams","location","redirectToProfile","redirectToRegister","signIn","navigateToReturnUrl","completeSignIn","fromQuery","startsWith","origin","redirectToApiAuthorizationPath","encodeURI","apiAuthorizationPath","replace","Logout","isReady","logout","processLogoutCallback","signOut","completeSignOut","ApiAuthorizationRoutes","loginAction","logoutAction","App","exact","baseUrl","getElementsByTagName","rootElement","getElementById","ReactDOM","basename"],"mappings":"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","file":"static/js/main.f1286835.chunk.js","sourcesContent":["export const ApplicationName = 'purchase_link';\r\n\r\nexport const QueryParameterNames = {\r\n ReturnUrl: 'returnUrl',\r\n Message: 'message'\r\n};\r\n\r\nexport const LogoutActions = {\r\n LogoutCallback: 'logout-callback',\r\n Logout: 'logout',\r\n LoggedOut: 'logged-out'\r\n};\r\n\r\nexport const LoginActions = {\r\n Login: 'login',\r\n LoginCallback: 'login-callback',\r\n LoginFailed: 'login-failed',\r\n Profile: 'profile',\r\n Register: 'register'\r\n};\r\n\r\nconst prefix = '/authentication';\r\n\r\nexport const ApplicationPaths = {\r\n DefaultLoginRedirectPath: '/',\r\n ApiAuthorizationClientConfigurationUrl: `_configuration/${ApplicationName}`,\r\n ApiAuthorizationPrefix: prefix,\r\n Login: `${prefix}/${LoginActions.Login}`,\r\n LoginFailed: `${prefix}/${LoginActions.LoginFailed}`,\r\n LoginCallback: `${prefix}/${LoginActions.LoginCallback}`,\r\n Register: `${prefix}/${LoginActions.Register}`,\r\n Profile: `${prefix}/${LoginActions.Profile}`,\r\n LogOut: `${prefix}/${LogoutActions.Logout}`,\r\n LoggedOut: `${prefix}/${LogoutActions.LoggedOut}`,\r\n LogOutCallback: `${prefix}/${LogoutActions.LogoutCallback}`,\r\n IdentityRegisterPath: 'Identity/Account/Register',\r\n IdentityManagePath: 'Identity/Account/Manage'\r\n};\r\n","import { UserManager, WebStorageStateStore } from 'oidc-client';\r\nimport { ApplicationPaths, ApplicationName } from './ApiAuthorizationConstants';\r\n\r\nexport class AuthorizeService {\r\n _callbacks = [];\r\n _nextSubscriptionId = 0;\r\n _user = null;\r\n _isAuthenticated = false;\r\n\r\n // By default pop ups are disabled because they don't work properly on Edge.\r\n // If you want to enable pop up authentication simply set this flag to false.\r\n _popUpDisabled = true;\r\n\r\n async isAuthenticated() {\r\n const user = await this.getUser();\r\n return !!user;\r\n }\r\n\r\n async getUser() {\r\n if (this._user && this._user.profile) {\r\n return this._user.profile;\r\n }\r\n\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager.getUser();\r\n return user && user.profile;\r\n }\r\n\r\n async getAccessToken() {\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager.getUser();\r\n return user && user.access_token;\r\n }\r\n\r\n // We try to authenticate the user in three different ways:\r\n // 1) We try to see if we can authenticate the user silently. This happens\r\n // when the user is already logged in on the IdP and is done using a hidden iframe\r\n // on the client.\r\n // 2) We try to authenticate the user using a PopUp Window. This might fail if there is a\r\n // Pop-Up blocker or the user has disabled PopUps.\r\n // 3) If the two methods above fail, we redirect the browser to the IdP to perform a traditional\r\n // redirect flow.\r\n async signIn(state) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n const silentUser = await this.userManager.signinSilent(this.createArguments());\r\n this.updateState(silentUser);\r\n return this.success(state);\r\n } catch (silentError) {\r\n // User might not be authenticated, fallback to popup authentication\r\n console.log(\"Silent authentication error: \", silentError);\r\n\r\n try {\r\n if (this._popUpDisabled) {\r\n throw new Error('Popup disabled. Change \\'AuthorizeService.js:AuthorizeService._popupDisabled\\' to false to enable it.')\r\n }\r\n\r\n const popUpUser = await this.userManager.signinPopup(this.createArguments());\r\n this.updateState(popUpUser);\r\n return this.success(state);\r\n } catch (popUpError) {\r\n if (popUpError.message === \"Popup window closed\") {\r\n // The user explicitly cancelled the login action by closing an opened popup.\r\n return this.error(\"The user closed the window.\");\r\n } else if (!this._popUpDisabled) {\r\n console.log(\"Popup authentication error: \", popUpError);\r\n }\r\n\r\n // PopUps might be blocked by the user, fallback to redirect\r\n try {\r\n await this.userManager.signinRedirect(this.createArguments(state));\r\n return this.redirect();\r\n } catch (redirectError) {\r\n console.log(\"Redirect authentication error: \", redirectError);\r\n return this.error(redirectError);\r\n }\r\n }\r\n }\r\n }\r\n\r\n async completeSignIn(url) {\r\n try {\r\n await this.ensureUserManagerInitialized();\r\n const user = await this.userManager.signinCallback(url);\r\n this.updateState(user);\r\n return this.success(user && user.state);\r\n } catch (error) {\r\n console.log('There was an error signing in: ', error);\r\n return this.error('There was an error signing in.');\r\n }\r\n }\r\n\r\n // We try to sign out the user in two different ways:\r\n // 1) We try to do a sign-out using a PopUp Window. This might fail if there is a\r\n // Pop-Up blocker or the user has disabled PopUps.\r\n // 2) If the method above fails, we redirect the browser to the IdP to perform a traditional\r\n // post logout redirect flow.\r\n async signOut(state) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n if (this._popUpDisabled) {\r\n throw new Error('Popup disabled. Change \\'AuthorizeService.js:AuthorizeService._popupDisabled\\' to false to enable it.')\r\n }\r\n\r\n await this.userManager.signoutPopup(this.createArguments());\r\n this.updateState(undefined);\r\n return this.success(state);\r\n } catch (popupSignOutError) {\r\n console.log(\"Popup signout error: \", popupSignOutError);\r\n try {\r\n await this.userManager.signoutRedirect(this.createArguments(state));\r\n return this.redirect();\r\n } catch (redirectSignOutError) {\r\n console.log(\"Redirect signout error: \", redirectSignOutError);\r\n return this.error(redirectSignOutError);\r\n }\r\n }\r\n }\r\n\r\n async completeSignOut(url) {\r\n await this.ensureUserManagerInitialized();\r\n try {\r\n const response = await this.userManager.signoutCallback(url);\r\n this.updateState(null);\r\n return this.success(response && response.data);\r\n } catch (error) {\r\n console.log(`There was an error trying to log out '${error}'.`);\r\n return this.error(error);\r\n }\r\n }\r\n\r\n updateState(user) {\r\n this._user = user;\r\n this._isAuthenticated = !!this._user;\r\n this.notifySubscribers();\r\n }\r\n\r\n subscribe(callback) {\r\n this._callbacks.push({ callback, subscription: this._nextSubscriptionId++ });\r\n return this._nextSubscriptionId - 1;\r\n }\r\n\r\n unsubscribe(subscriptionId) {\r\n const subscriptionIndex = this._callbacks\r\n .map((element, index) => element.subscription === subscriptionId ? { found: true, index } : { found: false })\r\n .filter(element => element.found === true);\r\n if (subscriptionIndex.length !== 1) {\r\n throw new Error(`Found an invalid number of subscriptions ${subscriptionIndex.length}`);\r\n }\r\n\r\n this._callbacks.splice(subscriptionIndex[0].index, 1);\r\n }\r\n\r\n notifySubscribers() {\r\n for (let i = 0; i < this._callbacks.length; i++) {\r\n const callback = this._callbacks[i].callback;\r\n callback();\r\n }\r\n }\r\n\r\n createArguments(state) {\r\n return { useReplaceToNavigate: true, data: state };\r\n }\r\n\r\n error(message) {\r\n return { status: AuthenticationResultStatus.Fail, message };\r\n }\r\n\r\n success(state) {\r\n return { status: AuthenticationResultStatus.Success, state };\r\n }\r\n\r\n redirect() {\r\n return { status: AuthenticationResultStatus.Redirect };\r\n }\r\n\r\n async ensureUserManagerInitialized() {\r\n if (this.userManager !== undefined) {\r\n return;\r\n }\r\n\r\n let response = await fetch(ApplicationPaths.ApiAuthorizationClientConfigurationUrl);\r\n if (!response.ok) {\r\n throw new Error(`Could not load settings for '${ApplicationName}'`);\r\n }\r\n\r\n let settings = await response.json();\r\n settings.automaticSilentRenew = true;\r\n settings.includeIdTokenInSilentRenew = true;\r\n settings.userStore = new WebStorageStateStore({\r\n prefix: ApplicationName\r\n });\r\n\r\n this.userManager = new UserManager(settings);\r\n\r\n this.userManager.events.addUserSignedOut(async () => {\r\n await this.userManager.removeUser();\r\n this.updateState(undefined);\r\n });\r\n }\r\n\r\n static get instance() { return authService }\r\n}\r\n\r\nconst authService = new AuthorizeService();\r\n\r\nexport default authService;\r\n\r\nexport const AuthenticationResultStatus = {\r\n Redirect: 'redirect',\r\n Success: 'success',\r\n Fail: 'fail'\r\n};\r\n","import React, { Component, Fragment } from \"react\";\r\nimport { NavItem, NavLink } from \"reactstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport authService from \"./AuthorizeService\";\r\nimport { ApplicationPaths } from \"./ApiAuthorizationConstants\";\r\n\r\nexport class LoginMenu extends Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.state = {\r\n\t\t\tisAuthenticated: false,\r\n\t\t\tuserName: null,\r\n\t\t};\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis._subscription = authService.subscribe(() => this.populateState());\r\n\t\tthis.populateState();\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tauthService.unsubscribe(this._subscription);\r\n\t}\r\n\r\n\tasync populateState() {\r\n\t\tconst [isAuthenticated, user] = await Promise.all([authService.isAuthenticated(), authService.getUser()]);\r\n\t\tthis.setState({\r\n\t\t\tisAuthenticated,\r\n\t\t\tuserName: user && user.name,\r\n\t\t});\r\n\t}\r\n\r\n\trender() {\r\n\t\tconst { isAuthenticated, userName } = this.state;\r\n\t\tif (!isAuthenticated) {\r\n\t\t\tconst registerPath = `${ApplicationPaths.Register}`;\r\n\t\t\tconst loginPath = `${ApplicationPaths.Login}`;\r\n\t\t\treturn this.anonymousView(registerPath, loginPath);\r\n\t\t} else {\r\n\t\t\tconst profilePath = `${ApplicationPaths.Profile}`;\r\n\t\t\tconst logoutPath = { pathname: `${ApplicationPaths.LogOut}`, state: { local: true } };\r\n\t\t\treturn this.authenticatedView(userName, profilePath, logoutPath);\r\n\t\t}\r\n\t}\r\n\r\n\tauthenticatedView(userName, profilePath, logoutPath) {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tHello {userName}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tLogout\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n\r\n\tanonymousView(registerPath, loginPath) {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tLogin\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { Collapse, Container, Navbar, NavbarBrand, NavbarToggler, NavItem, NavLink } from \"reactstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { LoginMenu } from \"./api-authorization/LoginMenu\";\r\nimport \"./NavMenu.css\";\r\n\r\nexport class NavMenu extends Component {\r\n\tstatic displayName = NavMenu.name;\r\n\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\r\n\t\tthis.toggleNavbar = this.toggleNavbar.bind(this);\r\n\t\tthis.state = {\r\n\t\t\tcollapsed: true,\r\n\t\t};\r\n\t}\r\n\r\n\ttoggleNavbar() {\r\n\t\tthis.setState({\r\n\t\t\tcollapsed: !this.state.collapsed,\r\n\t\t});\r\n\t}\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tPurchase Link\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tHome\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tCampaigns\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Container } from 'reactstrap';\r\nimport { NavMenu } from './NavMenu';\r\n\r\nexport class Layout extends Component {\r\n static displayName = Layout.name;\r\n\r\n render () {\r\n return (\r\n
\r\n \r\n \r\n {this.props.children}\r\n \r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\n\r\nexport class Home extends Component {\r\n\tstatic displayName = Home.name;\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t

Welcome To Purchase Link

\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import authService from \"../components/api-authorization/AuthorizeService\";\nimport axios from \"axios\";\n\nconst AD_LINK_API_BASE_URL = \"/v1/adlink\";\n\nexport class AdLinkServiceProvider {\n\tasync createAdLink(adLink) {\n\t\tconst token = await authService.getAccessToken();\n\t\tconst json = JSON.stringify(adLink);\n\t\treturn axios.post(AD_LINK_API_BASE_URL, json, {\n\t\t\theaders: !token\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t },\n\t\t});\n\t}\n\n\tasync getCampaignAdLinks(campaignId) {\n\t\tconst token = await authService.getAccessToken();\n\t\tconst json = JSON.stringify({\n\t\t\tcampaignId: campaignId,\n\t\t});\n\t\treturn axios.post(AD_LINK_API_BASE_URL + \"/campaign\", json, {\n\t\t\theaders: !token\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t },\n\t\t});\n\t}\n}\n","import authService from \"../components/api-authorization/AuthorizeService\";\nimport axios from \"axios\";\n\nconst AD_LINK_TYPE_API_BASE_URL = \"v1/adlinktype\";\n\nexport class AdLinkTypeServiceProvider {\n\tasync getAdLinkTypes() {\n\t\tconst token = await authService.getAccessToken();\n\t\treturn axios.get(AD_LINK_TYPE_API_BASE_URL, {\n\t\t\theaders: !token ? {} : { Authorization: `Bearer ${token}` },\n\t\t});\n\t}\n}\n","import authService from \"../components/api-authorization/AuthorizeService\";\nimport axios from \"axios\";\n\nconst BITLY_API_BASE_URL = \"https://api-ssl.bitly.com/v4\";\nconst BITLY_AUTH_URL = \"/v1/bitly\";\nconst CAMPAIGN_API_BASE_URL = \"/v1/campaign\";\n\nexport class CampaignServiceProvider {\n\tasync createOrUpdateCampaign(campaign) {\n\t\tconst token = await authService.getAccessToken();\n\t\tconst user = await authService.getUser();\n\t\tcampaign.CreatedByUserId = user.sub;\n\t\tconst json = JSON.stringify(campaign);\n\t\treturn axios.post(CAMPAIGN_API_BASE_URL + \"/createOrUpdateCampaign\", json, {\n\t\t\theaders: !token\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t },\n\t\t});\n\t}\n\n\tasync getCampaigns() {\n\t\tconst token = await authService.getAccessToken();\n\t\treturn axios.get(CAMPAIGN_API_BASE_URL, {\n\t\t\theaders: !token ? {} : { Authorization: `Bearer ${token}` },\n\t\t});\n\t}\n\n\tasync getCampaignById(campaignId) {\n\t\tconst token = await authService.getAccessToken();\n\t\treturn axios.get(CAMPAIGN_API_BASE_URL + \"/\" + campaignId, {\n\t\t\theaders: !token ? {} : { Authorization: `Bearer ${token}` },\n\t\t});\n\t}\n\n\tasync getCampaignStatuses() {\n\t\tconst token = await authService.getAccessToken();\n\t\treturn axios.get(CAMPAIGN_API_BASE_URL + \"/getAllCampaignStatuses\", {\n\t\t\theaders: !token ? {} : { Authorization: `Bearer ${token}` },\n\t\t});\n\t}\n\n\tasync generateBitlyLink(baseProductUrl, baseTargetUrl, campaignId, adLinkTypeId) {\n\t\tconst token = await authService.getAccessToken();\n\t\tconst user = await authService.getUser();\n\t\tconst linkJson = JSON.stringify({\n\t\t\tAdLinkTypeId: adLinkTypeId,\n\t\t\tBaseProductUrl: baseProductUrl,\n\t\t\tBaseTargetUrl: baseTargetUrl,\n\t\t\tCampaignId: campaignId,\n\t\t});\n\t\tconst result = await axios.post(BITLY_AUTH_URL, linkJson, {\n\t\t\theaders: !token\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t },\n\t\t});\n\t\tconst json = JSON.stringify({\n\t\t\tlong_url: result.data.targetUrl,\n\t\t});\n\t\tconst bitlyResult = await axios.post(BITLY_API_BASE_URL + \"/bitlinks\", json, {\n\t\t\theaders: {\n\t\t\t\tAuthorization: `Bearer ${result.data.authToken}`,\n\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t},\n\t\t});\n\t\treturn {\n\t\t\tuser: user,\n\t\t\tresult: bitlyResult,\n\t\t\tproduct_url: result.data.productUrl,\n\t\t\ttarget_url: result.data.targetUrl,\n\t\t};\n\t}\n\tasync updateCampaign(campaign) {\n\t\tconst token = await authService.getAccessToken();\n\t\tconst json = JSON.stringify(campaign);\n\t\treturn axios.post(CAMPAIGN_API_BASE_URL + \"/update\", json, {\n\t\t\theaders: !token\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t },\n\t\t});\n\t}\n}\n","import React, { Component } from \"react\";\n//import copy from \"copy-to-clipboard\";\nimport { AdLinkServiceProvider, AdLinkTypeServiceProvider, CampaignServiceProvider } from \"../../ServiceProviders\";\n//import { IoMdCopy, IoIosCopy } from \"react-icons/io\";\n\nexport class EditCampaign extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.AdLinkServiceProvider = new AdLinkServiceProvider();\n\t\tthis.AdLinkTypeServiceProvider = new AdLinkTypeServiceProvider();\n\t\tthis.CampaignServiceProvider = new CampaignServiceProvider();\n\n\t\tthis.state = {\n\t\t\t// step 2\n\t\t\tadLinks: [],\n\t\t\tadLinkTypes: [],\n\t\t\tid: this.props.match.params.id,\n\t\t\tisEditable: true,\n\t\t\tbaseTargetUrl: \"\",\n\t\t\tbaseProductUrl: \"\",\n\t\t\tcampaignStatuses: [],\n\t\t\tcampaignStatusId: 1,\n\t\t\tname: \"\",\n\t\t};\n\t\tthis.changeCampaignBaseProductUrlHandler = this.changeCampaignBaseProductUrlHandler.bind(this);\n\t\tthis.changeCampaignBaseTargetUrlHandler = this.changeCampaignBaseTargetUrlHandler.bind(this);\n\t\tthis.changeCampaignNameHandler = this.changeCampaignNameHandler.bind(this);\n\t\t//this.copyTextHandler = this.copyTextHandler.bind(this);\n\t}\n\n\t// step 3\n\tcomponentDidMount() {\n\t\t// step 4\n\t\tthis.AdLinkTypeServiceProvider.getAdLinkTypes().then((res) => {\n\t\t\tthis.setState({\n\t\t\t\tadLinkTypes: res.data,\n\t\t\t});\n\t\t});\n\n\t\tthis.CampaignServiceProvider.getCampaignStatuses().then((res) => {\n\t\t\tlet campaignStatuses = res.data;\n\t\t\tthis.setState({\n\t\t\t\tcampaignStatuses: campaignStatuses,\n\t\t\t});\n\t\t});\n\n\t\tif (this.state.id === \"_add\") {\n\t\t\tthis.setState({\n\t\t\t\tcampaignStatusId: 1,\n\t\t\t});\n\t\t} else {\n\t\t\tthis.AdLinkServiceProvider.getCampaignAdLinks(this.state.id).then((res) => {\n\t\t\t\tthis.setState({\n\t\t\t\t\tadLinks: res.data,\n\t\t\t\t});\n\t\t\t});\n\t\t\tthis.CampaignServiceProvider.getCampaignById(this.state.id).then((res) => {\n\t\t\t\tlet campaign = res.data;\n\t\t\t\tthis.setState({\n\t\t\t\t\tname: campaign.name,\n\t\t\t\t\tbaseProductUrl: campaign.baseProductUrl,\n\t\t\t\t\tbaseTargetUrl: campaign.baseTargetUrl,\n\t\t\t\t\tcampaignStatusId: campaign.campaignStatusId,\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\tsaveOrUpdateCampaign = (event) => {\n\t\tevent.preventDefault();\n\t\tvar campaignId = this.state.id;\n\t\tif (this.state.id === \"_add\") {\n\t\t\tcampaignId = 0;\n\t\t}\n\t\tlet campaign = {\n\t\t\tname: this.state.name,\n\t\t\tbaseProductUrl: this.state.baseProductUrl,\n\t\t\tbaseTargetUrl: this.state.baseTargetUrl,\n\t\t\tcampaignStatusId: this.state.campaignStatusId,\n\t\t\tid: campaignId,\n\t\t};\n\t\tconsole.log(\"campaign => \" + JSON.stringify(campaign));\n\n\t\tthis.CampaignServiceProvider.createOrUpdateCampaign(campaign).then((res) => {\n\t\t\tthis.props.history.push(`/campaign/${res.data}`);\n\t\t\tthis.setState({\n\t\t\t\tid: res.data,\n\t\t\t});\n\t\t\talert(\"Your campaign has been saved.\");\n\t\t});\n\t};\n\n\tchangeCampaignBaseProductUrlHandler = (event) => {\n\t\tthis.setState({ baseProductUrl: event.target.value });\n\t};\n\n\tchangeCampaignBaseTargetUrlHandler = (event) => {\n\t\tthis.setState({ baseTargetUrl: event.target.value });\n\t};\n\n\tchangeCampaignNameHandler = (event) => {\n\t\tthis.setState({ name: event.target.value });\n\t};\n\n\t// copyTextHandler = (event) => {\n\t// \tconst textToCopy = event.currentTarget.getAttribute(\"data-text-to-copy\");\n\t// \tcopy(textToCopy);\n\t// \tevent.preventDefault();\n\t// \talert(\"Copied to clipboard\");\n\t// };\n\n\tcancel() {\n\t\tthis.props.history.push(\"/campaigns\");\n\t}\n\n\tgetAdLinkTypeButton(adLinkType) {\n\t\tconst exists = this.state.adLinks.some((adLink) => adLink.adLinkTypeId === adLinkType.id);\n\t\tif (exists) {\n\t\t\tconst adLink = this.state.adLinks.find((adLink) => adLink.adLinkTypeId === adLinkType.id);\n\t\t\treturn (\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/* */}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/* */}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t);\n\t\t} else {\n\t\t\treturn (\n\t\t\t\t\n\t\t\t);\n\t\t}\n\t}\n\n\tgetTitle() {\n\t\tif (this.state.id === \"_add\") {\n\t\t\treturn

Add Campaign

;\n\t\t} else {\n\t\t\treturn

Edit Campaign

;\n\t\t}\n\t}\n\n\tgenerateShortLink = (event) => {\n\t\tevent.preventDefault();\n\t\tconst adLinkTypeId = event.currentTarget.getAttribute(\"data-ad-link-type-id\");\n\t\tconst adLinkName = event.currentTarget.getAttribute(\"data-ad-link-name\");\n\t\tthis.CampaignServiceProvider.generateBitlyLink(this.state.baseProductUrl, this.state.baseTargetUrl, this.state.id, adLinkTypeId).then((res) => {\n\t\t\tvar adLink = {\n\t\t\t\tadLinkTypeId: adLinkTypeId,\n\t\t\t\tcampaignId: this.state.id,\n\t\t\t\tcreatedByUserId: res.user.sub,\n\t\t\t\tname: adLinkName,\n\t\t\t\tlinkStatisticsId: res.result.data.id,\n\t\t\t\tproductUrl: res.product_url,\n\t\t\t\tshortUrl: res.result.data.link,\n\t\t\t\ttargetUrl: res.target_url,\n\t\t\t};\n\t\t\tvar adLinks = this.state.adLinks;\n\t\t\tthis.AdLinkServiceProvider.createAdLink(adLink).then((res) => {\n\t\t\t\tadLinks.push(res.data);\n\t\t\t\tthis.setState({\n\t\t\t\t\tadLinks: adLinks,\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t};\n\n\trender() {\n\t\tconst isAdd = this.state.id === \"_add\";\n\t\treturn (\n\t\t\t
\n\t\t\t\t

\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{this.getTitle()}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{!isAdd && (\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{!isAdd && (\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t

Short Url

\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t

Target Url

\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{this.state.adLinkTypes.map((adLinkType) => (\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t{this.getAdLinkTypeButton(adLinkType)}\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n","import React from \"react\";\n\nconst LoadingSpinner = () => (\n\t
\n\t\t Loading...\n\t
\n);\n\nexport default LoadingSpinner;\n","import React, { Component } from \"react\";\nimport { CampaignServiceProvider } from \"../../ServiceProviders/CampaignServiceProvider\";\nimport LoadingSpinner from \"../shared/LoadingSpinner\";\n\nexport class ListCampaigns extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.CampaignServiceProvider = new CampaignServiceProvider();\n\n\t\tthis.state = {\n\t\t\tcampaigns: [],\n\t\t\tloading: true,\n\t\t};\n\t\tthis.addCampaign = this.addCampaign.bind(this);\n\t\tthis.editCampaign = this.editCampaign.bind(this);\n\t\tthis.deleteCampaign = this.deleteCampaign.bind(this);\n\t}\n\n\tdeleteCampaign(id) {\n\t\tvar confirm = window.confirm(\"Do you really want to delete this campaign?\");\n\t\tif (confirm) {\n\t\t\tthis.CampaignServiceProvider.deleteCampaign(id).then((res) => {\n\t\t\t\tthis.setState({\n\t\t\t\t\tcampaigns: this.state.campaigns.filter((campaign) => campaign.id !== id),\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\teditCampaign(id) {\n\t\tthis.props.history.push(`/campaign/${id}`);\n\t}\n\n\taddCampaign() {\n\t\tthis.props.history.push(\"/campaign/_add\");\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.CampaignServiceProvider.getCampaigns().then((res) => {\n\t\t\tthis.setState({ campaigns: res.data, loading: false });\n\t\t});\n\t}\n\n\trender() {\n\t\tconst { loading } = this.state;\n\t\treturn (\n\t\t\t
\n\t\t\t\t

Campaigns

\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t

\n\t\t\t\t{loading && }\n\t\t\t\t{!loading && (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{this.state.campaigns.map((campaign) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
Campaign Name
{campaign.name}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t
\n\t\t);\n\t}\n}\n","import React from 'react'\r\nimport { Component } from 'react'\r\nimport { Route, Redirect } from 'react-router-dom'\r\nimport { ApplicationPaths, QueryParameterNames } from './ApiAuthorizationConstants'\r\nimport authService from './AuthorizeService'\r\n\r\nexport default class AuthorizeRoute extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n ready: false,\r\n authenticated: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._subscription = authService.subscribe(() => this.authenticationChanged());\r\n this.populateAuthenticationState();\r\n }\r\n\r\n componentWillUnmount() {\r\n authService.unsubscribe(this._subscription);\r\n }\r\n\r\n render() {\r\n const { ready, authenticated } = this.state;\r\n var link = document.createElement(\"a\");\r\n link.href = this.props.path;\r\n const returnUrl = `${link.protocol}//${link.host}${link.pathname}${link.search}${link.hash}`;\r\n const redirectUrl = `${ApplicationPaths.Login}?${QueryParameterNames.ReturnUrl}=${encodeURIComponent(returnUrl)}`\r\n if (!ready) {\r\n return
;\r\n } else {\r\n const { component: Component, ...rest } = this.props;\r\n return {\r\n if (authenticated) {\r\n return \r\n } else {\r\n return \r\n }\r\n }} />\r\n }\r\n }\r\n\r\n async populateAuthenticationState() {\r\n const authenticated = await authService.isAuthenticated();\r\n this.setState({ ready: true, authenticated });\r\n }\r\n\r\n async authenticationChanged() {\r\n this.setState({ ready: false, authenticated: false });\r\n await this.populateAuthenticationState();\r\n }\r\n}\r\n","import React from 'react'\r\nimport { Component } from 'react';\r\nimport authService from './AuthorizeService';\r\nimport { AuthenticationResultStatus } from './AuthorizeService';\r\nimport { LoginActions, QueryParameterNames, ApplicationPaths } from './ApiAuthorizationConstants';\r\n\r\n// The main responsibility of this component is to handle the user's login process.\r\n// This is the starting point for the login process. Any component that needs to authenticate\r\n// a user can simply perform a redirect to this component with a returnUrl query parameter and\r\n// let the component perform the login and return back to the return url.\r\nexport class Login extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n message: undefined\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LoginActions.Login:\r\n this.login(this.getReturnUrl());\r\n break;\r\n case LoginActions.LoginCallback:\r\n this.processLoginCallback();\r\n break;\r\n case LoginActions.LoginFailed:\r\n const params = new URLSearchParams(window.location.search);\r\n const error = params.get(QueryParameterNames.Message);\r\n this.setState({ message: error });\r\n break;\r\n case LoginActions.Profile:\r\n this.redirectToProfile();\r\n break;\r\n case LoginActions.Register:\r\n this.redirectToRegister();\r\n break;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n\r\n render() {\r\n const action = this.props.action;\r\n const { message } = this.state;\r\n\r\n if (!!message) {\r\n return
{message}
\r\n } else {\r\n switch (action) {\r\n case LoginActions.Login:\r\n return (
Processing login
);\r\n case LoginActions.LoginCallback:\r\n return (
Processing login callback
);\r\n case LoginActions.Profile:\r\n case LoginActions.Register:\r\n return (
);\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n }\r\n\r\n async login(returnUrl) {\r\n const state = { returnUrl };\r\n const result = await authService.signIn(state);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n break;\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(returnUrl);\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(`Invalid status result ${result.status}.`);\r\n }\r\n }\r\n\r\n async processLoginCallback() {\r\n const url = window.location.href;\r\n const result = await authService.completeSignIn(url);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n // There should not be any redirects as the only time completeSignIn finishes\r\n // is when we are doing a redirect sign in flow.\r\n throw new Error('Should not redirect.');\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(`Invalid authentication result status '${result.status}'.`);\r\n }\r\n }\r\n\r\n getReturnUrl(state) {\r\n const params = new URLSearchParams(window.location.search);\r\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n // This is an extra check to prevent open redirects.\r\n throw new Error(\"Invalid return url. The return url needs to have the same origin as the current page.\")\r\n }\r\n return (state && state.returnUrl) || fromQuery || `${window.location.origin}/`;\r\n }\r\n\r\n redirectToRegister() {\r\n this.redirectToApiAuthorizationPath(`${ApplicationPaths.IdentityRegisterPath}?${QueryParameterNames.ReturnUrl}=${encodeURI(ApplicationPaths.Login)}`);\r\n }\r\n\r\n redirectToProfile() {\r\n this.redirectToApiAuthorizationPath(ApplicationPaths.IdentityManagePath);\r\n }\r\n\r\n redirectToApiAuthorizationPath(apiAuthorizationPath) {\r\n const redirectUrl = `${window.location.origin}/${apiAuthorizationPath}`;\r\n // It's important that we do a replace here so that when the user hits the back arrow on the\r\n // browser they get sent back to where it was on the app instead of to an endpoint on this\r\n // component.\r\n window.location.replace(redirectUrl);\r\n }\r\n\r\n navigateToReturnUrl(returnUrl) {\r\n // It's important that we do a replace here so that we remove the callback uri with the\r\n // fragment containing the tokens from the browser history.\r\n window.location.replace(returnUrl);\r\n }\r\n}\r\n","import React from 'react'\r\nimport { Component } from 'react';\r\nimport authService from './AuthorizeService';\r\nimport { AuthenticationResultStatus } from './AuthorizeService';\r\nimport { QueryParameterNames, LogoutActions, ApplicationPaths } from './ApiAuthorizationConstants';\r\n\r\n// The main responsibility of this component is to handle the user's logout process.\r\n// This is the starting point for the logout process, which is usually initiated when a\r\n// user clicks on the logout button on the LoginMenu component.\r\nexport class Logout extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n message: undefined,\r\n isReady: false,\r\n authenticated: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LogoutActions.Logout:\r\n if (!!window.history.state.state.local) {\r\n this.logout(this.getReturnUrl());\r\n } else {\r\n // This prevents regular links to /authentication/logout from triggering a logout\r\n this.setState({ isReady: true, message: \"The logout was not initiated from within the page.\" });\r\n }\r\n break;\r\n case LogoutActions.LogoutCallback:\r\n this.processLogoutCallback();\r\n break;\r\n case LogoutActions.LoggedOut:\r\n this.setState({ isReady: true, message: \"You successfully logged out!\" });\r\n break;\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n\r\n this.populateAuthenticationState();\r\n }\r\n\r\n render() {\r\n const { isReady, message } = this.state;\r\n if (!isReady) {\r\n return
\r\n }\r\n if (!!message) {\r\n return (
{message}
);\r\n } else {\r\n const action = this.props.action;\r\n switch (action) {\r\n case LogoutActions.Logout:\r\n return (
Processing logout
);\r\n case LogoutActions.LogoutCallback:\r\n return (
Processing logout callback
);\r\n case LogoutActions.LoggedOut:\r\n return (
{message}
);\r\n default:\r\n throw new Error(`Invalid action '${action}'`);\r\n }\r\n }\r\n }\r\n\r\n async logout(returnUrl) {\r\n const state = { returnUrl };\r\n const isauthenticated = await authService.isAuthenticated();\r\n if (isauthenticated) {\r\n const result = await authService.signOut(state);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n break;\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(returnUrl);\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\"Invalid authentication result status.\");\r\n }\r\n } else {\r\n this.setState({ message: \"You successfully logged out!\" });\r\n }\r\n }\r\n\r\n async processLogoutCallback() {\r\n const url = window.location.href;\r\n const result = await authService.completeSignOut(url);\r\n switch (result.status) {\r\n case AuthenticationResultStatus.Redirect:\r\n // There should not be any redirects as the only time completeAuthentication finishes\r\n // is when we are doing a redirect sign in flow.\r\n throw new Error('Should not redirect.');\r\n case AuthenticationResultStatus.Success:\r\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\r\n break;\r\n case AuthenticationResultStatus.Fail:\r\n this.setState({ message: result.message });\r\n break;\r\n default:\r\n throw new Error(\"Invalid authentication result status.\");\r\n }\r\n }\r\n\r\n async populateAuthenticationState() {\r\n const authenticated = await authService.isAuthenticated();\r\n this.setState({ isReady: true, authenticated });\r\n }\r\n\r\n getReturnUrl(state) {\r\n const params = new URLSearchParams(window.location.search);\r\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\r\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\r\n // This is an extra check to prevent open redirects.\r\n throw new Error(\"Invalid return url. The return url needs to have the same origin as the current page.\")\r\n }\r\n return (state && state.returnUrl) ||\r\n fromQuery ||\r\n `${window.location.origin}${ApplicationPaths.LoggedOut}`;\r\n }\r\n\r\n navigateToReturnUrl(returnUrl) {\r\n return window.location.replace(returnUrl);\r\n }\r\n}\r\n","import React, { Component, Fragment } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { Login } from './Login'\r\nimport { Logout } from './Logout'\r\nimport { ApplicationPaths, LoginActions, LogoutActions } from './ApiAuthorizationConstants';\r\n\r\nexport default class ApiAuthorizationRoutes extends Component {\r\n\r\n render () {\r\n return(\r\n \r\n loginAction(LoginActions.Login)} />\r\n loginAction(LoginActions.LoginFailed)} />\r\n loginAction(LoginActions.LoginCallback)} />\r\n loginAction(LoginActions.Profile)} />\r\n loginAction(LoginActions.Register)} />\r\n logoutAction(LogoutActions.Logout)} />\r\n logoutAction(LogoutActions.LogoutCallback)} />\r\n logoutAction(LogoutActions.LoggedOut)} />\r\n );\r\n }\r\n}\r\n\r\nfunction loginAction(name){\r\n return ();\r\n}\r\n\r\nfunction logoutAction(name) {\r\n return ();\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { Route } from \"react-router\";\r\nimport { Layout } from \"./components/Layout\";\r\nimport { Home } from \"./components/Home\";\r\nimport { ListCampaigns, EditCampaign } from \"./components/campaign\";\r\nimport AuthorizeRoute from \"./components/api-authorization/AuthorizeRoute\";\r\nimport ApiAuthorizationRoutes from \"./components/api-authorization/ApiAuthorizationRoutes\";\r\nimport { ApplicationPaths } from \"./components/api-authorization/ApiAuthorizationConstants\";\r\n\r\nimport \"./custom.css\";\r\n\r\nexport default class App extends Component {\r\n\tstatic displayName = App.name;\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t{/* Campaign Routes */}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n","import 'bootstrap/dist/css/bootstrap.css';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport App from './App';\r\n//import registerServiceWorker from './registerServiceWorker';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\r\nconst rootElement = document.getElementById('root');\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement);\r\n\r\n// Uncomment the line above that imports the registerServiceWorker function\r\n// and the line below to register the generated service worker.\r\n// By default create-react-app includes a service worker to improve the\r\n// performance of the application by caching static assets. This service\r\n// worker can interfere with the Identity UI, so it is\r\n// disabled by default when Identity is being used.\r\n//\r\n//registerServiceWorker();\r\n\r\n"],"sourceRoot":""}