{"version":3,"sources":["util/constants.ts","assets/images/undraw_male_avatar_323b.svg","assets/images/gender_unspecified.svg","assets/images/undraw_Login_v483.svg","assets/images/top-no-bullets.svg","assets/images/google-button/btn_google_dark_disabled_ios.svg","assets/images/google-button/btn_google_dark_normal_ios.svg","assets/images/undraw_message_sent_1030.svg","assets/images/undraw_authentication_fsn5.svg","assets/images/undraw_forgot_password_gi2d.svg","assets/images/undraw_windy_day_x63l.svg","assets/images/gender_female.svg","assets/images/gender_male.svg","assets/images/undraw_security_o890.svg","../node_modules/moment/locale sync /^/.//.*$","api/objects/language.ts","api/translation/APITranslation.ts","api/translationClient.ts","components/FullPageLoading.tsx","api/APIClient.ts","api/client.ts","components/Footer.tsx","components/Top.tsx","navigation/StyledLink.tsx","util/routes.ts","pages/AccountsPage.tsx","api/objects/ProviderType.ts","api/objects/User.ts","components/AppleLoginButton.tsx","components/GoogleLoginButton.tsx","components/LanguageChanger.tsx","components/OrDividerRow.tsx","pages/LoginPage.tsx","pages/ResetPasswordMailSentPage.tsx","api/objects/ClientSourceType.ts","pages/ResetPasswordPage.tsx","pages/ResetPasswordRequestPage.tsx","components/GenderChanger.tsx","pages/SignupPage.tsx","pages/UnauthorizedPage.tsx","theme/theme.ts","App.tsx","serviceWorker.ts","index.tsx","util/env.ts","api/AuthenticationClient.ts","util/utils.ts"],"names":["process","trim","length","Error","DEFAULT_REDIRECT_URL","getEnvURL","QUERY_PARAM_EMAIL","QUERY_PARAM_REDIRECT_URL","QUERY_PARAM_SOURCE","QUERY_PARAM_ERROR","QUERY_PARAM_ERROR_ID","QUERY_PARAM_LANGUAGE","QUERY_PARAM_ACCESS_TOKEN","PASSWORD_MIN_LENGTH","PASSWORD_MAX_LENGTH","console","debug","module","exports","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","code","keys","Object","resolve","mapLanguageToDisplayText","language","JSON","stringify","enabledLanguages","TranslationExportType","APITranslation","AuthenticationClient","constructor","applicationName","authenticationClientOptions","super","getTranslations","exportType","BY_LANGUAGE_OBJECT","get","applicationData","translations","translationClient","apiRootURL","getRootAPI","clientID","clientSecret","autoRefreshClientCredentials","on","error","useStyles","makeStyles","theme","createStyles","loading","color","palette","primary","main","FullPageLoading","props","classes","Grid","container","spacing","direction","alignItems","justify","style","minHeight","item","xs","CircularProgress","className","size","APIClient","createUserSpecialist","createUserSpecialistRequest","post","includeClientAuth","bodyObject","sendSpecialistResetPasswordMail","request","loginOwnCredentials","AUTHENTICATION_URI","resetPassword","accessToken","newPassword","put","password","headers","Authorization","_getAuthorizationHeaderValue","cancelPasswordReset","delete","loginOrSignUpWithGoogleSpecialist","rootAPI","client","userTimezone","moment","tz","guess","window","Copyright","Typography","variant","align","Link","href","Date","getFullYear","icon","zIndex","width","position","top","right","Top","alt","src","TopSVG","link","textDecoration","getURLWithParams","url","urlParams","endsWith","substr","basePath","getEnvVariable","startsWith","getBasePath","queryString","getLoginURL","getSignupURL","getUnauthorizedURL","getResetRequestURL","getResetPasswordMailSentURL","getResetPasswordURL","getLanguageFromQueryString","parse","location","search","undefined","getErrorFromQueryString","translate","root","backgroundColor","background","paper","title","marginTop","marginBottom","height","margin","errorText","verticalAlign","marginLeft","list","listItem","text","display","padding","flexDirection","email","inline","progress","withLocalize","useState","authenticatedEmail","setAuthenticatedEmail","isLoading","setLoading","setError","checkedToken","setCheckedToken","redirectURL","linkParams","encodeURIComponent","useEffect","getAuthenticatedUser","then","user","catch","includes","statusCode","assign","message","finally","handleLogout","useCallback","a","logout","Container","maxWidth","Paper","elevation","square","AccountLoginSVG","component","hidden","Box","List","ListItem","button","onClick","ListItemAvatar","Avatar","ProfileAvatarSVG","ListItemText","secondary","Divider","StyledLink","to","Button","mt","ProviderType","UserRole","Gender","border","img","cursor","outline","scopes","activeLanguage","redirectURI","borderRadius","type","scale","getAuthorizationURLForProvider","APPLE","userRole","ROLE_SPECIALIST","response","URL","AppleID","auth","init","clientId","searchParams","scope","replace","join","state","nonce","usePopup","handleSuccess","data","handleError","document","addEventListener","removeEventListener","data-color","data-border","data-border-radius","data-type","data-scale","paddingRight","fontSize","justifyContent","textAlign","innerText","innerTextSignedIn","innerTextLoading","GoogleLoginButton","onSuccess","onError","defaultLabel","buttonRef","React","useRef","isCanceled","setAuth2","setInnerText","isLoggedIn","setLoggedIn","googleUser","getBasicProfile","getName","reason","current","gapi","load","warn","auth2Singleton","auth2","client_id","cookie_policy","attachClickHandler","startIcon","disabled","GoogleButtonIconDisabledSVG","GoogleButtonIconSVG","fullWidth","clsx","mapLanguageToFlagElement","countryName","toString","LanguageChanger","anchorEl","setAnchorEl","linkClassNames","dropdownClassNames","containerClassNames","handleClose","languageItems","MenuItem","key","onChange","ml","aria-controls","aria-haspopup","event","currentTarget","selectedLanguage","Menu","keepMounted","open","Boolean","onClose","textCenter","toLowerCase","body","common","white","avatar","form","submit","languageDropdown","termsContainer","termsDivider","marginRight","typography","socialLoginContainer","decodeURIComponent","errorEmail","setErrorEmail","errorPassword","setErrorPassword","setLanguage","setEmail","setPassword","showPassword","setShowPassword","clearErrors","callLogin","login","handleLoginClick","preventDefault","handleGoogleLoginSuccess","authData","getAuthResponse","googleIdToken","id_token","AvatarSVG","alignContent","newLanguage","setActiveLanguage","noValidate","TextField","helperText","required","value","label","name","autoComplete","autoFocus","target","FormControl","InputProps","endAdornment","InputAdornment","IconButton","prevValue","rel","orientation","image","h5","subtitle1","fontWeight","resendButton","textTransform","mailSentFlag","setMailSentFlag","handleClick","setTimeout","origin","MailSentSVG","sm","ClientSourceType","appSourceTypes","APP_PATIENT_ANDROID","APP_PATIENT_IOS","cancelLink","clientSource","errorNewPassword","setErrorNewPassword","errorConfirmPassword","setErrorConfirmPassword","setNewPassword","confirmPassword","setConfirmPassword","isAppClientSource","useMemo","getAuthenticatedUserForToken","handleCancelRequestClick","history","push","callResetPassword","resetUser","loginEmail","handleResetPasswordClick","PasswordResetSVG","Tooltip","arrow","inputProps","newValue","checkPasswordLength","min","max","callResetRequest","resetPasswordParams","handleResetRequestClick","mapGenderToIconElement","gender","GenderUnspecifiedSVG","FEMALE","TRANSGENDER_FEMALE","GenderFemaleSVG","MALE","TRANSGENDER_MALE","GenderMaleSVG","UNSPECIFIED","GenderChanger","genderItems","enabledGenders","selectedGender","breakpoints","up","down","genderDropdown","setGender","userAgree","setUserAgree","handleSignupClick","NewSpecialistIcon","aria-label","onMouseDown","onMouseUp","FormLabel","htmlFor","values","newGender","FormControlLabel","control","Checkbox","checked","prevState","row","callToAction","loginButton","fontWeightBold","SecuritySVG","createMuiTheme","contrastText","initialize","addTranslation","isDataLoaded","setDataLoaded","languages","options","renderToStaticMarkup","defaultLanguage","ignoreTranslateChildren","translation","translationTransform","cachedTranslations","BY_KEY_OBJECT","translationDataFromAPI","ThemeProvider","CssBaseline","path","AccountsPage","UnauthorizedPage","SignupPage","LoginPage","ResetPasswordRequestPage","ResetPasswordMailSentPage","ResetPasswordPage","hostname","match","Root","ReactDOM","render","getElementById","navigator","serviceWorker","ready","registration","unregister","envVarName","envURL","returnURL","substring","EventEmitter","_apiRootURL","_oAuth2Login","_clientID","_clientSecret","_isAuthenticated","_autoRefreshClientCredentials","_onError","_refreshTimeout","_userTimezone","this","access_token","emit","EVENT_AUTHENTICATED","EVENT_NOT_AUTHENTICATED","hasAuthToken","token","_getDefaultHeaders","fetch","strURIPath","method","eventName","encodeBodyInFormData","basicAuth","rest","formData","FormData","entries","append","username","objOptions","credentials","Buffer","from","strRequestURL","encodeURI","status","json","parsedResponse","strErrorMessage","statusText","strBodyText","customError","ImFineError","errorCode","objBody","error_description","shouldThrowError","errorHandlerResponse","toPrivateObject","checkOwnToken","checkAccessToken","providerType","objectToQueryString","redirect_uri","user_role","refreshToken","startAutoRefresh","loginResponse","grant_type","clearTimeout","refreshTimeoutSeconds","expires_in","AUTO_REFRESH_TOKENS_EXPIRING_IN_SECONDS","isAuthenticated","logoutOwnCredentials","queryObject","encodeURIComponentEnabled","querystring","reduce","acc","String"],"mappings":"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","file":"static/js/main.016d81b1.chunk.js","sourcesContent":["import { getEnvURL } from \"./env\";\n\nif (\n process.env.REACT_APP_DEFAULT_REDIRECT_URL === undefined ||\n process.env.REACT_APP_DEFAULT_REDIRECT_URL.trim().length === 0\n) {\n throw new Error(\"Invalid process.env.REACT_APP_DEFAULT_REDIRECT_URL\");\n}\n\nexport const DEFAULT_REDIRECT_URL = getEnvURL(process.env.REACT_APP_DEFAULT_REDIRECT_URL);\n\nexport const QUERY_PARAM_EMAIL: string = \"email\";\nexport const QUERY_PARAM_REDIRECT_URL = \"r\";\nexport const QUERY_PARAM_SOURCE = \"source\";\nexport const QUERY_PARAM_ERROR = \"error\";\nexport const QUERY_PARAM_ERROR_ID = \"error_id\";\nexport const QUERY_PARAM_LANGUAGE = \"language\";\nexport const QUERY_PARAM_ACCESS_TOKEN = \"access_token\";\nexport const PASSWORD_MIN_LENGTH = 6;\nexport const PASSWORD_MAX_LENGTH = 70;\n\nexport const DEFAULT_UNAUTHORIZED_ERROR_MESSAGE = \"You are not authorized to access this resource.\";\n\nconsole.debug(\"DEFAULT_REDIRECT_URL\", DEFAULT_REDIRECT_URL);\n","module.exports = __webpack_public_path__ + \"static/media/undraw_male_avatar_323b.8a2b1b74.svg\";","module.exports = __webpack_public_path__ + \"static/media/gender_unspecified.0a15410b.svg\";","module.exports = __webpack_public_path__ + \"static/media/undraw_Login_v483.dfa03c58.svg\";","module.exports = __webpack_public_path__ + \"static/media/top-no-bullets.cf51eda8.svg\";","module.exports = __webpack_public_path__ + \"static/media/btn_google_dark_disabled_ios.09576845.svg\";","module.exports = __webpack_public_path__ + \"static/media/btn_google_dark_normal_ios.1bb80544.svg\";","module.exports = __webpack_public_path__ + \"static/media/undraw_message_sent_1030.ec9ce703.svg\";","module.exports = __webpack_public_path__ + \"static/media/undraw_authentication_fsn5.19d4b6fa.svg\";","module.exports = __webpack_public_path__ + \"static/media/undraw_forgot_password_gi2d.2ae5dd06.svg\";","module.exports = __webpack_public_path__ + \"static/media/undraw_windy_day_x63l.501cd016.svg\";","module.exports = __webpack_public_path__ + \"static/media/gender_female.6ea80913.svg\";","module.exports = __webpack_public_path__ + \"static/media/gender_male.a5038e30.svg\";","module.exports = __webpack_public_path__ + \"static/media/undraw_security_o890.30c8347c.svg\";","var map = {\n\t\"./af\": 232,\n\t\"./af.js\": 232,\n\t\"./ar\": 233,\n\t\"./ar-dz\": 234,\n\t\"./ar-dz.js\": 234,\n\t\"./ar-kw\": 235,\n\t\"./ar-kw.js\": 235,\n\t\"./ar-ly\": 236,\n\t\"./ar-ly.js\": 236,\n\t\"./ar-ma\": 237,\n\t\"./ar-ma.js\": 237,\n\t\"./ar-sa\": 238,\n\t\"./ar-sa.js\": 238,\n\t\"./ar-tn\": 239,\n\t\"./ar-tn.js\": 239,\n\t\"./ar.js\": 233,\n\t\"./az\": 240,\n\t\"./az.js\": 240,\n\t\"./be\": 241,\n\t\"./be.js\": 241,\n\t\"./bg\": 242,\n\t\"./bg.js\": 242,\n\t\"./bm\": 243,\n\t\"./bm.js\": 243,\n\t\"./bn\": 244,\n\t\"./bn.js\": 244,\n\t\"./bo\": 245,\n\t\"./bo.js\": 245,\n\t\"./br\": 246,\n\t\"./br.js\": 246,\n\t\"./bs\": 247,\n\t\"./bs.js\": 247,\n\t\"./ca\": 248,\n\t\"./ca.js\": 248,\n\t\"./cs\": 249,\n\t\"./cs.js\": 249,\n\t\"./cv\": 250,\n\t\"./cv.js\": 250,\n\t\"./cy\": 251,\n\t\"./cy.js\": 251,\n\t\"./da\": 252,\n\t\"./da.js\": 252,\n\t\"./de\": 253,\n\t\"./de-at\": 254,\n\t\"./de-at.js\": 254,\n\t\"./de-ch\": 255,\n\t\"./de-ch.js\": 255,\n\t\"./de.js\": 253,\n\t\"./dv\": 256,\n\t\"./dv.js\": 256,\n\t\"./el\": 257,\n\t\"./el.js\": 257,\n\t\"./en-au\": 258,\n\t\"./en-au.js\": 258,\n\t\"./en-ca\": 259,\n\t\"./en-ca.js\": 259,\n\t\"./en-gb\": 260,\n\t\"./en-gb.js\": 260,\n\t\"./en-ie\": 261,\n\t\"./en-ie.js\": 261,\n\t\"./en-il\": 262,\n\t\"./en-il.js\": 262,\n\t\"./en-in\": 263,\n\t\"./en-in.js\": 263,\n\t\"./en-nz\": 264,\n\t\"./en-nz.js\": 264,\n\t\"./en-sg\": 265,\n\t\"./en-sg.js\": 265,\n\t\"./eo\": 266,\n\t\"./eo.js\": 266,\n\t\"./es\": 267,\n\t\"./es-do\": 268,\n\t\"./es-do.js\": 268,\n\t\"./es-us\": 269,\n\t\"./es-us.js\": 269,\n\t\"./es.js\": 267,\n\t\"./et\": 270,\n\t\"./et.js\": 270,\n\t\"./eu\": 271,\n\t\"./eu.js\": 271,\n\t\"./fa\": 272,\n\t\"./fa.js\": 272,\n\t\"./fi\": 273,\n\t\"./fi.js\": 273,\n\t\"./fil\": 274,\n\t\"./fil.js\": 274,\n\t\"./fo\": 275,\n\t\"./fo.js\": 275,\n\t\"./fr\": 276,\n\t\"./fr-ca\": 277,\n\t\"./fr-ca.js\": 277,\n\t\"./fr-ch\": 278,\n\t\"./fr-ch.js\": 278,\n\t\"./fr.js\": 276,\n\t\"./fy\": 279,\n\t\"./fy.js\": 279,\n\t\"./ga\": 280,\n\t\"./ga.js\": 280,\n\t\"./gd\": 281,\n\t\"./gd.js\": 281,\n\t\"./gl\": 282,\n\t\"./gl.js\": 282,\n\t\"./gom-deva\": 283,\n\t\"./gom-deva.js\": 283,\n\t\"./gom-latn\": 284,\n\t\"./gom-latn.js\": 284,\n\t\"./gu\": 285,\n\t\"./gu.js\": 285,\n\t\"./he\": 286,\n\t\"./he.js\": 286,\n\t\"./hi\": 287,\n\t\"./hi.js\": 287,\n\t\"./hr\": 288,\n\t\"./hr.js\": 288,\n\t\"./hu\": 289,\n\t\"./hu.js\": 289,\n\t\"./hy-am\": 290,\n\t\"./hy-am.js\": 290,\n\t\"./id\": 291,\n\t\"./id.js\": 291,\n\t\"./is\": 292,\n\t\"./is.js\": 292,\n\t\"./it\": 293,\n\t\"./it-ch\": 294,\n\t\"./it-ch.js\": 294,\n\t\"./it.js\": 293,\n\t\"./ja\": 295,\n\t\"./ja.js\": 295,\n\t\"./jv\": 296,\n\t\"./jv.js\": 296,\n\t\"./ka\": 297,\n\t\"./ka.js\": 297,\n\t\"./kk\": 298,\n\t\"./kk.js\": 298,\n\t\"./km\": 299,\n\t\"./km.js\": 299,\n\t\"./kn\": 300,\n\t\"./kn.js\": 300,\n\t\"./ko\": 301,\n\t\"./ko.js\": 301,\n\t\"./ku\": 302,\n\t\"./ku.js\": 302,\n\t\"./ky\": 303,\n\t\"./ky.js\": 303,\n\t\"./lb\": 304,\n\t\"./lb.js\": 304,\n\t\"./lo\": 305,\n\t\"./lo.js\": 305,\n\t\"./lt\": 306,\n\t\"./lt.js\": 306,\n\t\"./lv\": 307,\n\t\"./lv.js\": 307,\n\t\"./me\": 308,\n\t\"./me.js\": 308,\n\t\"./mi\": 309,\n\t\"./mi.js\": 309,\n\t\"./mk\": 310,\n\t\"./mk.js\": 310,\n\t\"./ml\": 311,\n\t\"./ml.js\": 311,\n\t\"./mn\": 312,\n\t\"./mn.js\": 312,\n\t\"./mr\": 313,\n\t\"./mr.js\": 313,\n\t\"./ms\": 314,\n\t\"./ms-my\": 315,\n\t\"./ms-my.js\": 315,\n\t\"./ms.js\": 314,\n\t\"./mt\": 316,\n\t\"./mt.js\": 316,\n\t\"./my\": 317,\n\t\"./my.js\": 317,\n\t\"./nb\": 318,\n\t\"./nb.js\": 318,\n\t\"./ne\": 319,\n\t\"./ne.js\": 319,\n\t\"./nl\": 320,\n\t\"./nl-be\": 321,\n\t\"./nl-be.js\": 321,\n\t\"./nl.js\": 320,\n\t\"./nn\": 322,\n\t\"./nn.js\": 322,\n\t\"./oc-lnc\": 323,\n\t\"./oc-lnc.js\": 323,\n\t\"./pa-in\": 324,\n\t\"./pa-in.js\": 324,\n\t\"./pl\": 325,\n\t\"./pl.js\": 325,\n\t\"./pt\": 326,\n\t\"./pt-br\": 327,\n\t\"./pt-br.js\": 327,\n\t\"./pt.js\": 326,\n\t\"./ro\": 328,\n\t\"./ro.js\": 328,\n\t\"./ru\": 329,\n\t\"./ru.js\": 329,\n\t\"./sd\": 330,\n\t\"./sd.js\": 330,\n\t\"./se\": 331,\n\t\"./se.js\": 331,\n\t\"./si\": 332,\n\t\"./si.js\": 332,\n\t\"./sk\": 333,\n\t\"./sk.js\": 333,\n\t\"./sl\": 334,\n\t\"./sl.js\": 334,\n\t\"./sq\": 335,\n\t\"./sq.js\": 335,\n\t\"./sr\": 336,\n\t\"./sr-cyrl\": 337,\n\t\"./sr-cyrl.js\": 337,\n\t\"./sr.js\": 336,\n\t\"./ss\": 338,\n\t\"./ss.js\": 338,\n\t\"./sv\": 339,\n\t\"./sv.js\": 339,\n\t\"./sw\": 340,\n\t\"./sw.js\": 340,\n\t\"./ta\": 341,\n\t\"./ta.js\": 341,\n\t\"./te\": 342,\n\t\"./te.js\": 342,\n\t\"./tet\": 343,\n\t\"./tet.js\": 343,\n\t\"./tg\": 344,\n\t\"./tg.js\": 344,\n\t\"./th\": 345,\n\t\"./th.js\": 345,\n\t\"./tk\": 346,\n\t\"./tk.js\": 346,\n\t\"./tl-ph\": 347,\n\t\"./tl-ph.js\": 347,\n\t\"./tlh\": 348,\n\t\"./tlh.js\": 348,\n\t\"./tr\": 349,\n\t\"./tr.js\": 349,\n\t\"./tzl\": 350,\n\t\"./tzl.js\": 350,\n\t\"./tzm\": 351,\n\t\"./tzm-latn\": 352,\n\t\"./tzm-latn.js\": 352,\n\t\"./tzm.js\": 351,\n\t\"./ug-cn\": 353,\n\t\"./ug-cn.js\": 353,\n\t\"./uk\": 354,\n\t\"./uk.js\": 354,\n\t\"./ur\": 355,\n\t\"./ur.js\": 355,\n\t\"./uz\": 356,\n\t\"./uz-latn\": 357,\n\t\"./uz-latn.js\": 357,\n\t\"./uz.js\": 356,\n\t\"./vi\": 358,\n\t\"./vi.js\": 358,\n\t\"./x-pseudo\": 359,\n\t\"./x-pseudo.js\": 359,\n\t\"./yo\": 360,\n\t\"./yo.js\": 360,\n\t\"./zh-cn\": 361,\n\t\"./zh-cn.js\": 361,\n\t\"./zh-hk\": 362,\n\t\"./zh-hk.js\": 362,\n\t\"./zh-mo\": 363,\n\t\"./zh-mo.js\": 363,\n\t\"./zh-tw\": 364,\n\t\"./zh-tw.js\": 364\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 422;","export type LanguageType = \"en\" | \"ro\";\n\nexport const DEFAULT_LANGUAGE: LanguageType = \"ro\";\n\nexport type TextWithLanguage = { [key in LanguageType]: string };\n\nexport const mapLanguageToDisplayText = (language: LanguageType) => {\n switch (language) {\n case \"en\":\n return \"English\";\n case \"ro\":\n return \"Română\";\n default:\n throw new Error(`Unhandled language type ${JSON.stringify(language)}`);\n }\n};\n\nexport const emptyTextWithLanguages = { [DEFAULT_LANGUAGE]: \"\" };\n\nexport const enabledLanguages: LanguageType[] = [\"en\", \"ro\"];\n\nexport const getBrowserLanguage = () => {\n return window.navigator.language.split(\"-\")[0] as LanguageType;\n};\n\nexport const getDefaultLanguage = () => {\n return /*getBrowserLanguage() ||*/ DEFAULT_LANGUAGE as LanguageType;\n};\n\nexport const getFirstLanguageAvailableFromTextObject = (\n textAllLanguages: TextWithLanguage\n): LanguageType | undefined => {\n let selectedLanguage: LanguageType | undefined;\n\n for (const [language, text] of Object.entries(textAllLanguages)) {\n if (text && text.trim().length > 0) {\n selectedLanguage = language as LanguageType;\n break;\n }\n }\n\n return selectedLanguage;\n};\n","import { AuthenticationClient, AuthenticationClientOptions } from \"../AuthenticationClient\";\nimport { Application } from \"./objects/Application\";\nimport { TranslationExportReturnType } from \"./objects/Translation\";\n\nexport enum TranslationExportType {\n BY_LANGUAGE = \"by_language\",\n BY_KEY = \"by_key\",\n BY_LANGUAGE_OBJECT = \"by_language_object\",\n BY_KEY_OBJECT = \"by_key_object\",\n}\n\nexport class APITranslation extends AuthenticationClient {\n constructor(\n public applicationName: string,\n authenticationClientOptions: AuthenticationClientOptions\n ) {\n super(authenticationClientOptions);\n if (!applicationName) {\n throw new Error(\"Invalid application name\");\n }\n }\n\n async getTranslations(\n exportType = TranslationExportType.BY_LANGUAGE_OBJECT\n ): Promise {\n const applicationData = (await this.get(\n `/applications/${this.applicationName}?exportType=${exportType}`\n )) as Application;\n if (!applicationData.translations) {\n throw new Error(`Application ${this.applicationName} does not have any translations.`);\n }\n\n return applicationData.translations;\n }\n}\n","import { APITranslation } from \"./translation/APITranslation\";\nimport { getRootAPI } from \"../util/env\";\n\nif (!process.env.REACT_APP_TRANSLATION_APPLICATION) {\n throw new Error(\"process.env.REACT_APP_TRANSLATION_APPLICATION is undefined\");\n}\n\nexport const translationApplicationName = process.env.REACT_APP_TRANSLATION_APPLICATION;\n\nconst translationClient = new APITranslation(translationApplicationName, {\n apiRootURL: `${getRootAPI()}/translation`,\n clientID: process.env.REACT_APP_API_CLIENT_ID!!,\n clientSecret: process.env.REACT_APP_API_CLIENT_SECRET!!,\n autoRefreshClientCredentials: true,\n});\n\ntranslationClient.on(\"error\", console.error);\n\nexport default translationClient;\n","import React from \"react\";\nimport { Grid, CircularProgress, createStyles, Theme } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/styles\";\nimport { CircularProgressProps } from \"@material-ui/core/CircularProgress\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n loading: {\n color: theme.palette.primary.main,\n },\n })\n);\n\nconst FullPageLoading = (props: CircularProgressProps) => {\n const classes = useStyles();\n\n return (\n \n \n \n \n \n );\n};\n\nexport default FullPageLoading;\n","import { AuthenticationClient, AUTHENTICATION_URI } from \"./AuthenticationClient\";\nimport { CreateSpecialistRequest } from \"./objects/CreateSpecialistRequest\";\nimport { GoogleLoginOrSignUpRequest } from \"./objects/GoogleLoginOrSignUpRequest\";\nimport { RegisterResponse } from \"./objects/RegisterResponse\";\nimport SendSpecialistResetPasswordRequest from \"./objects/SendSpecialistResetPasswordRequest\";\nimport { User } from \"./objects/User\";\n\nexport class APIClient extends AuthenticationClient {\n async createUserSpecialist(\n createUserSpecialistRequest: CreateSpecialistRequest\n ): Promise {\n return this.post(\"/register/specialist\", {\n includeClientAuth: true,\n bodyObject: createUserSpecialistRequest,\n });\n }\n\n async sendSpecialistResetPasswordMail(\n request: SendSpecialistResetPasswordRequest\n ): Promise {\n await this.loginOwnCredentials();\n await this.post(`${AUTHENTICATION_URI}/user/reset-password-request`, {\n bodyObject: request,\n });\n }\n\n async resetPassword(accessToken: string, newPassword: string): Promise {\n return this.put(`${AUTHENTICATION_URI}/user/reset-password`, {\n bodyObject: {\n password: newPassword,\n },\n headers: {\n Authorization: this._getAuthorizationHeaderValue(accessToken),\n },\n });\n }\n\n async cancelPasswordReset(accessToken: string): Promise {\n return this.delete(`${AUTHENTICATION_URI}/user/reset-password-request`, {\n headers: {\n Authorization: this._getAuthorizationHeaderValue(accessToken),\n },\n });\n }\n\n async loginOrSignUpWithGoogleSpecialist(request: GoogleLoginOrSignUpRequest): Promise {\n await this.loginOwnCredentials();\n return this.post(`${AUTHENTICATION_URI}/user/specialist/login/google`, {\n bodyObject: request,\n });\n }\n}\n","import moment from \"moment-timezone\";\nimport { getRootAPI } from \"../util/env\";\nimport { APIClient } from \"./APIClient\";\nimport { AuthenticationClientOptions } from \"./AuthenticationClient\";\nimport { LanguageType } from \"./objects/language\";\n\nconst rootAPI = getRootAPI();\nconsole.debug(\"rootAPI\", rootAPI);\n\nconst client = new APIClient({\n apiRootURL: `${rootAPI}`,\n clientID: process.env.REACT_APP_API_CLIENT_ID!!,\n clientSecret: process.env.REACT_APP_API_CLIENT_SECRET!!,\n autoRefreshClientCredentials: true,\n userTimezone: moment.tz.guess(),\n // onError: clientErrorHandler\n} as AuthenticationClientOptions);\n\nclient.on(\"error\", console.error);\n\nexport const enabledLanguages: LanguageType[] = [\"en\", \"ro\"];\n\n(window as any).client = client;\n\nexport default client;\n","import { Link, Typography } from \"@material-ui/core\";\nimport React from \"react\";\n\nexport const Copyright = () => (\n \n {\"Copyright © \"}\n \n Ascendio TechVision\n {\" \"}\n {new Date().getFullYear()}\n {\".\"}\n \n);\n","import { createStyles, makeStyles, Theme } from \"@material-ui/core\";\nimport React from \"react\";\nimport TopSVG from \"../assets/images/top-no-bullets.svg\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n icon: {\n zIndex: -999,\n width: \"30vw\",\n position: \"absolute\",\n top: 0,\n right: 0,\n },\n })\n);\n\nexport const Top = () => {\n const classes = useStyles();\n return \"top\";\n};\n","import { createStyles, makeStyles } from \"@material-ui/styles\";\nimport React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Theme } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n link: {\n color: theme.palette.primary.main,\n textDecoration: \"none\",\n \"&:focus, &:hover, &:visited, &:link, &:active\": {\n textDecoration: \"none\",\n },\n },\n })\n);\n\nexport default (props: any) => {\n const classes = useStyles();\n return ;\n}\n","import queryString from \"query-string\";\nimport { TranslateFunction } from \"react-localize-redux\";\nimport { LanguageType } from \"../api/objects/language\";\nimport { QUERY_PARAM_ERROR, QUERY_PARAM_ERROR_ID, QUERY_PARAM_LANGUAGE } from \"./constants\";\nimport { getEnvVariable } from \"./env\";\n\nexport type URLParams = { [key: string]: string | string[] };\n\nexport const LOGIN_URL = \"/login\";\nexport const SIGNUP_URL = \"/signup\";\nexport const ACCOUNTS_URL = \"/accounts\";\nexport const UNAUTHORIZED_URL = \"/unauthorized\";\nexport const RESET_REQUEST_URL = \"/reset-request\";\nexport const RESET_PASSWORD_MAIL_SENT_URL = \"/reset-request-mail-sent\";\nexport const RESET_PASSWORD_URL = \"/reset-password\";\n\nexport const getBasePath = (): string => {\n let basePath = getEnvVariable(\"REACT_APP_BASE_PATH\").trim();\n\n if (basePath === \"/\" || basePath === \"\") {\n return \"\";\n }\n\n if (!basePath.startsWith(\"/\")) {\n basePath = \"/\" + basePath;\n }\n\n if (basePath.endsWith(\"/\")) {\n basePath = basePath.substr(0, basePath.length - 1);\n }\n\n return basePath; // TODO #translation\n};\n\nexport const getURLWithParams = (url: string, urlParams?: URLParams): string => {\n if (url.trim().length > 1 && url.endsWith(\"/\")) {\n url = url.substr(0, url.length - 1);\n }\n\n return `${getBasePath()}${url}${urlParams ? `?${queryString.stringify(urlParams)}` : \"\"}`;\n};\n\nexport const getLoginURL = (urlParams?: URLParams): string =>\n getURLWithParams(LOGIN_URL, urlParams);\n\nexport const getSignupURL = (urlParams?: URLParams): string =>\n getURLWithParams(SIGNUP_URL, urlParams);\n\nexport const getAccountsURL = (urlParams?: URLParams): string =>\n getURLWithParams(ACCOUNTS_URL, urlParams);\n\nexport const getUnauthorizedURL = (urlParams?: URLParams): string =>\n getURLWithParams(UNAUTHORIZED_URL, urlParams);\n\nexport const getResetRequestURL = (urlParams?: URLParams): string =>\n getURLWithParams(RESET_REQUEST_URL, urlParams);\n\nexport const getResetPasswordMailSentURL = (urlParams?: URLParams): string =>\n getURLWithParams(RESET_PASSWORD_MAIL_SENT_URL, urlParams);\n\nexport const getResetPasswordURL = (urlParams?: URLParams): string =>\n getURLWithParams(RESET_PASSWORD_URL, urlParams);\n\nexport const getLanguageFromQueryString = (): LanguageType | undefined => {\n const urlParams = queryString.parse(window.location.search);\n return urlParams[QUERY_PARAM_LANGUAGE]\n ? (urlParams[QUERY_PARAM_LANGUAGE] as LanguageType)\n : undefined;\n};\n\nexport const getErrorFromQueryString = (translate: TranslateFunction): string | undefined => {\n const urlParams = queryString.parse(window.location.search);\n return (\n (urlParams[QUERY_PARAM_ERROR] as string) ??\n (urlParams[QUERY_PARAM_ERROR_ID]\n ? (translate(urlParams[QUERY_PARAM_ERROR_ID] as string) as string)\n : undefined)\n );\n};\n","import { UIErrorMessageType } from \"@im-fine/ui-libs\";\nimport {\n Avatar,\n Box,\n Button,\n CircularProgress,\n Container,\n createStyles,\n Divider,\n List,\n ListItem,\n ListItemAvatar,\n ListItemText,\n makeStyles,\n Paper,\n Theme,\n Typography,\n} from \"@material-ui/core\";\nimport ErrorIcon from \"@material-ui/icons/Error\";\nimport PersonOutlineIcon from \"@material-ui/icons/PersonOutline\";\nimport queryString from \"query-string\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { LocalizeContextProps, Translate, withLocalize } from \"react-localize-redux\";\nimport { StaticContext } from \"react-router\";\nimport { RouteComponentProps } from \"react-router-dom\";\nimport client from \"../api/client\";\nimport AccountLoginSVG from \"../assets/images/undraw_Login_v483.svg\";\nimport ProfileAvatarSVG from \"../assets/images/undraw_male_avatar_323b.svg\";\nimport { Copyright } from \"../components/Footer\";\nimport { Top } from \"../components/Top\";\nimport StyledLink from \"../navigation/StyledLink\";\nimport { DEFAULT_REDIRECT_URL, QUERY_PARAM_REDIRECT_URL } from \"../util/constants\";\nimport { getErrorFromQueryString, getLoginURL } from \"../util/routes\";\n\nexport interface AccountsPageProps {}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n backgroundColor: theme.palette.background.paper,\n },\n title: {\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(2),\n },\n icon: {\n height: \"7rem\",\n width: \"100%\",\n margin: theme.spacing(1),\n },\n errorText: {\n verticalAlign: \"bottom\",\n marginLeft: theme.spacing(0.5),\n },\n list: {\n width: \"100%\",\n // maxWidth: 360,\n backgroundColor: theme.palette.background.paper,\n },\n listItem: {\n color: theme.palette.text.primary,\n margin: theme.spacing(1),\n \"&:hover\": {\n color: theme.palette.text.primary,\n },\n },\n paper: {\n marginTop: theme.spacing(8),\n display: \"flex\",\n padding: theme.spacing(4, 4, 6, 4),\n\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n email: {\n color: theme.palette.primary.main,\n },\n inline: {\n display: \"inline\",\n },\n progress: {\n margin: theme.spacing(2),\n },\n })\n);\n\nfunction AccountsPage(\n props: AccountsPageProps & RouteComponentProps & LocalizeContextProps\n) {\n const classes = useStyles(props);\n const urlParams = queryString.parse(window.location.search);\n\n const [authenticatedEmail, setAuthenticatedEmail] = useState();\n const [isLoading, setLoading] = useState(false);\n const [error, setError] = useState(\n getErrorFromQueryString(props.translate)\n );\n const [checkedToken, setCheckedToken] = useState(false);\n\n const redirectURL = (urlParams[QUERY_PARAM_REDIRECT_URL] as string) || DEFAULT_REDIRECT_URL;\n const linkParams = {\n ...urlParams,\n [QUERY_PARAM_REDIRECT_URL]: encodeURIComponent(redirectURL),\n };\n\n const handleCurrentUserClick = () => {\n window.location.assign(redirectURL);\n };\n\n useEffect(() => {\n if (!checkedToken && !isLoading) {\n setLoading(true);\n client\n .getAuthenticatedUser()\n .then((user) => {\n setAuthenticatedEmail(user.email);\n setCheckedToken(true);\n })\n .catch((error) => {\n console.error(error);\n setAuthenticatedEmail(undefined);\n setCheckedToken(true);\n\n if ([401, 403].includes(error.statusCode)) {\n window.location.assign(getLoginURL(linkParams));\n return;\n }\n\n setError(error.message);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, [checkedToken, isLoading, linkParams]);\n\n const handleLogout = useCallback(async () => {\n await client.logout();\n window.location.assign(getLoginURL(linkParams));\n }, [linkParams]);\n\n return (\n \n \n \n \"account\"\n \n \n \n {isLoading ? (\n \n ) : error ? (\n \n ) : (\n <>\n \n \n \n \n \n \n \n {authenticatedEmail}\n \n \n }\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n \n \n \n \n );\n}\n\nexport default withLocalize(AccountsPage);\n","export enum ProviderType {\n GOOGLE = \"google\",\n ZOOM = \"zoom\",\n FACEBOOK = \"facebook\",\n APPLE = \"apple\",\n}\n","import { APIObjectInterface } from \"./APIObjectInterface\";\nimport { LanguageType } from \"./language\";\n\nexport interface User extends APIObjectInterface {\n email: string;\n emailStatus: UserEmailStatus;\n language: LanguageType;\n enabled: boolean;\n permissions: string[];\n roles: string[];\n accountExpired: boolean;\n accountLocked: boolean;\n credentialsExpired: boolean;\n gender: Gender;\n}\n\nexport enum UserRole {\n ROLE_ADMIN = \"ROLE_ADMIN\",\n ROLE_SPECIALIST = \"ROLE_SPECIALIST\",\n ROLE_SPECIALIST_UNVERIFIED = \"ROLE_SPECIALIST_UNVERIFIED\",\n ROLE_PATIENT = \"ROLE_PATIENT\",\n ROLE_CONTENT_MANAGER = \"ROLE_CONTENT_MANAGER\",\n ROLE_TESTER = \"ROLE_TESTER\",\n ROLE_SUPPORT = \"ROLE_SUPPORT\",\n}\n\nexport enum Gender {\n MALE = \"male\",\n FEMALE = \"female\",\n TRANSGENDER_MALE = \"transgender_male\",\n TRANSGENDER_FEMALE = \"transgender_female\",\n UNSPECIFIED = \"unspecified\",\n}\n\nexport type UserEmailStatus = \"verified\" | \"not_verified\";\n","import { ButtonProps, createStyles, makeStyles, Theme } from \"@material-ui/core\";\nimport React, { useEffect } from \"react\";\nimport { LocalizeContextProps, withLocalize } from \"react-localize-redux\";\nimport client from \"../api/client\";\nimport { ProviderType } from \"../api/objects/ProviderType\";\nimport { UserRole } from \"../api/objects/User\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n button: {\n padding: 0,\n border: \"2px solid black\",\n \"&:hover\": {\n backgroundColor: \"initial\",\n },\n },\n img: {},\n root: {\n height: 45,\n cursor: \"pointer\",\n outline: \"none !important\",\n \"& > div\": {\n maxWidth: \"none !important\",\n outline: \"none !important\",\n },\n \"& > div > div\": {\n outline: \"none !important\",\n },\n },\n })\n);\n\nconst scopes = [\"name\", \"email\"];\n\nexport interface AppleLoginButtonProps {\n redirectURI: string;\n // height?: number;\n // width?: number;\n color?: \"white\" | \"black\";\n border?: boolean;\n type?: \"sign-in\" | \"continue\";\n borderRadius?: number; // 0 - 50\n scale?: number; // 1 - 6\n ButtonProps?: Partial;\n}\n\n// https://developer.apple.com/documentation/sign_in_with_apple/sign_in_with_apple_js/incorporating_sign_in_with_apple_into_other_platforms\nfunction AppleLoginButton({\n activeLanguage,\n redirectURI,\n border,\n borderRadius = 4,\n // height = 30,\n // width = 140,\n color = \"black\",\n type = \"sign-in\",\n scale = 1,\n}: AppleLoginButtonProps & LocalizeContextProps) {\n const classes = useStyles();\n\n // let locale = window.navigator.language;\n // switch (activeLanguage.code) {\n // case \"en\":\n // locale = \"en_US\";\n // break;\n // default:\n // locale = `${activeLanguage.code.toLowerCase()}_${activeLanguage.code.toUpperCase()}`;\n // }\n\n useEffect(() => {\n client\n .getAuthorizationURLForProvider(ProviderType.APPLE, {\n scopes,\n redirectURI,\n userRole: UserRole.ROLE_SPECIALIST,\n })\n .then((response) => {\n const url = new URL(response.link);\n\n (window as any).AppleID.auth.init({\n clientId: url.searchParams.get(\"client_id\"),\n scope: url.searchParams.get(\"scope\")?.replace(\"+\", \" \") ?? scopes.join(\" \"),\n redirectURI: url.searchParams.get(\"redirect_uri\"),\n state: url.searchParams.get(\"state\"),\n nonce: window.location.href,\n usePopup: false, //or false defaults to false\n });\n\n // setTimeout(() => (window as any).AppleID.auth.signIn().then(console.debug), 5000);\n });\n const handleSuccess = (data: any) => {\n console.debug(\"SUCCESS APPLE\", data);\n };\n\n const handleError = (error: any) => {\n console.error(\"ERROR APPLE\", error);\n };\n\n //Listen for authorization success\n window.document.addEventListener(\"AppleIDSignInOnSuccess\", handleSuccess);\n //Listen for authorization failures\n window.document.addEventListener(\"AppleIDSignInOnFailure\", handleError);\n\n return () => {\n window.document.removeEventListener(\"AppleIDSignInOnSuccess\", handleSuccess);\n window.document.removeEventListener(\"AppleIDSignInOnFailure\", handleError);\n };\n }, [redirectURI]);\n\n return (\n \n );\n}\n\nexport default withLocalize(AppleLoginButton);\n","import {\n Button,\n ButtonProps,\n CircularProgress,\n createStyles,\n makeStyles,\n Theme,\n} from \"@material-ui/core\";\nimport clsx from \"clsx\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { Translate } from \"react-localize-redux\";\nimport GoogleButtonIconDisabledSVG from \"../assets/images/google-button/btn_google_dark_disabled_ios.svg\";\nimport GoogleButtonIconSVG from \"../assets/images/google-button/btn_google_dark_normal_ios.svg\";\nimport { getEnvVariable } from \"../util/env\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n button: {\n // backgroundColor: \"#4285F4\",\n padding: 0,\n // paddingLeft: theme.spacing(1),\n paddingRight: theme.spacing(1),\n fontSize: 14,\n height: 40,\n justifyContent: \"flex-start\",\n textAlign: \"center\",\n borderRadius: 2,\n backgroundColor: \"#ff\",\n },\n icon: {},\n innerText: {\n width: \"100%\",\n textAlign: \"center\",\n marginLeft: -theme.spacing(1),\n },\n innerTextSignedIn: {\n width: \"calc(100% - 46px)\",\n // textAlign: \"left\",\n marginLeft: theme.spacing(1),\n },\n innerTextLoading: {\n marginLeft: -40,\n width: \"100%\",\n },\n loading: {\n marginTop: theme.spacing(1),\n color: \"inherit\",\n },\n })\n);\n\nexport interface GoogleLoginButtonProps extends ButtonProps {\n onSuccess?: (googleUser: gapi.auth2.GoogleUser) => void;\n onError?: (reason: any) => void;\n scope?: string;\n defaultLabel?: React.ReactNode;\n isLoading?: boolean;\n}\n\nexport default function GoogleLoginButton({\n onSuccess,\n onError,\n scope,\n defaultLabel,\n isLoading,\n ...props\n}: GoogleLoginButtonProps) {\n const classes = useStyles();\n\n const buttonRef = React.useRef();\n const isCanceled = React.useRef(false);\n const [auth2, setAuth2] = useState(undefined);\n const [innerText, setInnerText] = useState(\n defaultLabel ?? \n );\n const [isLoggedIn, setLoggedIn] = useState(false);\n\n const handleSuccess = useCallback(\n (googleUser: gapi.auth2.GoogleUser) => {\n onSuccess?.(googleUser);\n setInnerText(\"Continue as \" + googleUser.getBasicProfile().getName());\n setLoggedIn(true);\n },\n [onSuccess]\n );\n\n const handleError = useCallback(\n (reason: any) => {\n onError?.(reason);\n console.error(\"Google sign in error: \", reason);\n },\n [onError]\n );\n\n useEffect(() => {\n if (isCanceled.current) {\n return;\n }\n\n window.gapi.load(\"auth2\", function () {\n if (!buttonRef.current) {\n console.warn(\"No button ref\");\n return;\n }\n\n // Retrieve the singleton for the GoogleAuth library and set up the client.\n const auth2Singleton = window.gapi.auth2.init({\n client_id: getEnvVariable(\"REACT_APP_GOOGLE_CLIENT_ID\"),\n cookie_policy: \"single_host_origin\",\n // Request scopes in addition to 'profile' and 'email'\n scope,\n });\n\n auth2Singleton.attachClickHandler(buttonRef.current, {}, handleSuccess, handleError);\n\n setAuth2(auth2Singleton);\n });\n\n return () => {\n isCanceled.current = true;\n };\n }, [handleError, handleSuccess, scope]);\n\n return (\n \n }\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n buttonRef={buttonRef}\n {...props}\n className={clsx(classes.button, props.className)}\n >\n \n {isLoading ? : innerText}\n \n \n );\n}\n","import * as React from \"react\";\nimport { LanguageType, mapLanguageToDisplayText } from \"../api/objects/language\";\nimport { Button, Menu, MenuItem, Box } from \"@material-ui/core\";\n\nexport interface LanguageChangerProps {\n selectedLanguage: LanguageType;\n enabledLanguages: LanguageType[];\n id?: string;\n linkClassNames?: string;\n dropdownClassNames?: string;\n containerClassNames?: string;\n title?: string;\n onChange: (newLanguage: LanguageType) => void;\n}\n\nexport const mapLanguageToFlagElement = (language: LanguageType) => {\n let countryName = language.toString();\n switch (language) {\n case \"en\":\n countryName = \"gb\";\n }\n return ;\n};\n\nexport const LanguageChanger = (props: LanguageChangerProps) => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const id = props.id || \"language-changer__dropdown\";\n const linkClassNames = props.linkClassNames || \"\";\n const dropdownClassNames = props.dropdownClassNames || \"\";\n const containerClassNames = props.containerClassNames || \"\";\n const title = props.title || \"Change language\";\n\n const handleClick = (event: any) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const languageItems = props.enabledLanguages.map((language) => (\n {\n props.onChange(language);\n handleClose();\n }}\n >\n {mapLanguageToFlagElement(language)}\n \n {mapLanguageToDisplayText(language)}\n \n \n ));\n\n return (\n
\n \n {mapLanguageToFlagElement(props.selectedLanguage)}\n \n {mapLanguageToDisplayText(props.selectedLanguage)}\n \n \n \n {languageItems}\n \n
\n );\n};\n","import { createStyles, Divider, Grid, makeStyles, Theme, Typography } from \"@material-ui/core\";\nimport React from \"react\";\nimport { LocalizeContextProps, withLocalize } from \"react-localize-redux\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n textCenter: {\n textAlign: \"center\",\n },\n })\n);\n\nexport interface OrDividerRowProps {}\n\nfunction OrDividerRow(props: OrDividerRowProps & LocalizeContextProps) {\n const classes = useStyles();\n\n return (\n \n \n \n \n \n \n {(props.translate(\"or\") as string).toLowerCase()}\n \n \n \n \n \n \n );\n}\n\nexport default withLocalize(OrDividerRow);\n","import { UIErrorMessageType } from \"@im-fine/ui-libs\";\nimport {\n Avatar,\n Box,\n Button,\n Container,\n Divider,\n FormControl,\n Grid,\n IconButton,\n InputAdornment,\n Link,\n Paper,\n TextField,\n Theme,\n Typography,\n} from \"@material-ui/core\";\nimport ErrorIcon from \"@material-ui/icons/Error\";\nimport Visibility from \"@material-ui/icons/Visibility\";\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport queryString from \"query-string\";\nimport React, { useCallback, useState } from \"react\";\nimport { LocalizeContextProps, Translate, withLocalize } from \"react-localize-redux\";\nimport { StaticContext } from \"react-router\";\nimport { RouteComponentProps } from \"react-router-dom\";\nimport client from \"../api/client\";\nimport { enabledLanguages, getDefaultLanguage, LanguageType } from \"../api/objects/language\";\nimport AvatarSVG from \"../assets/images/undraw_male_avatar_323b.svg\";\nimport AppleLoginButton from \"../components/AppleLoginButton\";\nimport { Copyright } from \"../components/Footer\";\nimport GoogleLoginButton from \"../components/GoogleLoginButton\";\nimport { LanguageChanger } from \"../components/LanguageChanger\";\nimport OrDividerRow from \"../components/OrDividerRow\";\nimport { Top } from \"../components/Top\";\nimport StyledLink from \"../navigation/StyledLink\";\nimport {\n DEFAULT_REDIRECT_URL,\n QUERY_PARAM_EMAIL,\n QUERY_PARAM_LANGUAGE,\n QUERY_PARAM_REDIRECT_URL,\n} from \"../util/constants\";\nimport {\n getErrorFromQueryString,\n getLanguageFromQueryString,\n getResetRequestURL,\n getSignupURL,\n} from \"../util/routes\";\n\nexport interface LoginPageProps {}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n body: {\n backgroundColor: theme.palette.common.white,\n },\n },\n errorText: {\n verticalAlign: \"bottom\",\n marginLeft: theme.spacing(0.5),\n },\n paper: {\n marginTop: theme.spacing(8),\n display: \"flex\",\n padding: theme.spacing(5),\n\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n avatar: {\n height: 70,\n width: 70,\n margin: theme.spacing(1),\n },\n form: {\n width: \"100%\", // Fix IE 11 issue.\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n languageDropdown: {},\n link: {\n textDecoration: \"none\",\n \"&:focus, &:hover, &:visited, &:link, &:active\": {\n textDecoration: \"none\",\n },\n },\n termsContainer: {\n height: \"100%\",\n },\n termsDivider: {\n marginLeft: 5,\n marginRight: 5,\n minHeight: theme.typography.fontSize,\n },\n socialLoginContainer: {\n marginBottom: theme.spacing(2),\n },\n textCenter: {\n textAlign: \"center\",\n },\n })\n);\n\nfunction LoginPage(\n props: LoginPageProps & RouteComponentProps & LocalizeContextProps\n) {\n const classes = useStyles();\n const urlParams = queryString.parse(window.location.search);\n\n const redirectURL = decodeURIComponent(\n (urlParams[QUERY_PARAM_REDIRECT_URL] as string) ?? DEFAULT_REDIRECT_URL\n );\n const [error, setError] = useState(\n getErrorFromQueryString(props.translate)\n );\n const [errorEmail, setErrorEmail] = useState(undefined);\n const [errorPassword, setErrorPassword] = useState(undefined);\n const [language, setLanguage] = useState(getLanguageFromQueryString() ?? getDefaultLanguage());\n const [email, setEmail] = useState(\n urlParams[QUERY_PARAM_EMAIL]\n ? decodeURIComponent(urlParams[QUERY_PARAM_EMAIL] as string)\n : \"\"\n );\n const [password, setPassword] = useState(\"\");\n const [isLoading, setLoading] = useState(false);\n const [showPassword, setShowPassword] = useState(false);\n\n const handleEmailChange = (event: React.ChangeEvent) => {\n setErrorEmail(undefined);\n setEmail(event.target.value);\n };\n\n const handlePasswordChange = (event: React.ChangeEvent) => {\n setErrorPassword(undefined);\n setPassword(event.target.value);\n };\n\n const clearErrors = () => {\n setErrorEmail(undefined);\n setErrorPassword(undefined);\n setError(undefined);\n };\n\n const handleLanguageChange = (newLanguage: LanguageType) => {\n setLanguage(newLanguage);\n props.setActiveLanguage(newLanguage);\n };\n\n const callLogin = async () => {\n try {\n setLoading(true);\n clearErrors();\n if (email === undefined || email.trim().length === 0) {\n setErrorEmail(\"Empty email.\");\n return;\n }\n if (password === undefined || password.length === 0) {\n setErrorPassword(\"Empty password.\");\n return;\n }\n\n await client.login(email.trim().toLowerCase(), password);\n\n window.location.assign(redirectURL);\n } catch (error) {\n console.error(error);\n if (\n typeof error.message === \"string\" &&\n error.message.toLowerCase().includes(\"email\")\n ) {\n setErrorEmail(error.message);\n } else if (\n typeof error.message === \"string\" &&\n error.message.toLowerCase().includes(\"password\")\n ) {\n setErrorPassword(error.message);\n } else {\n setError(error.message);\n }\n } finally {\n setLoading(false);\n }\n };\n\n const handleLoginClick = async (event: any) => {\n event.preventDefault();\n return await callLogin();\n };\n\n const handleGoogleLoginSuccess = useCallback(\n async (googleUser: gapi.auth2.GoogleUser) => {\n setLoading(true);\n\n // const authData = googleUser.getAuthResponse(true);\n const authData = googleUser.getAuthResponse(true);\n console.debug(\"authData\", authData);\n\n (window as any).authData = authData;\n\n try {\n clearErrors();\n /*const result =*/ await client.loginOrSignUpWithGoogleSpecialist({\n googleIdToken: authData.id_token,\n });\n // console.debug(\"result\", result);\n\n window.location.assign(redirectURL);\n } catch (error) {\n setError(error.message);\n } finally {\n setLoading(false);\n }\n },\n [redirectURL]\n );\n\n const linkParams: { [key: string]: string } = {\n ...urlParams,\n [QUERY_PARAM_LANGUAGE]: language,\n };\n\n if (email.trim().length > 0) {\n linkParams[QUERY_PARAM_EMAIL] = encodeURIComponent(email);\n }\n\n if (redirectURL !== DEFAULT_REDIRECT_URL) {\n linkParams[QUERY_PARAM_REDIRECT_URL] = redirectURL;\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n setShowPassword((prevValue) => !prevValue)\n }\n >\n {showPassword ? : }\n \n \n ),\n }}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n\nexport default withLocalize(LoginPage);\n","import {\n Box,\n Button,\n CircularProgress,\n Container,\n Grid,\n Paper,\n Theme,\n Typography,\n} from \"@material-ui/core\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport queryString from \"query-string\";\nimport React, { useState } from \"react\";\nimport { LocalizeContextProps, Translate, withLocalize } from \"react-localize-redux\";\nimport { StaticContext } from \"react-router\";\nimport { RouteComponentProps } from \"react-router-dom\";\nimport client from \"../api/client\";\nimport MailSentSVG from \"../assets/images/undraw_message_sent_1030.svg\";\nimport { Copyright } from \"../components/Footer\";\nimport { Top } from \"../components/Top\";\nimport StyledLink from \"../navigation/StyledLink\";\nimport { QUERY_PARAM_EMAIL } from \"../util/constants\";\nimport { getLoginURL, getResetPasswordURL, URLParams } from \"../util/routes\";\n\nexport interface ResetPasswordMailSentPageProps {}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n body: {\n backgroundColor: theme.palette.common.white,\n },\n },\n paper: {\n marginTop: theme.spacing(8),\n display: \"flex\",\n padding: theme.spacing(5),\n\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n image: {\n width: \"100%\",\n maxWidth: \"20rem\",\n margin: theme.spacing(1),\n },\n title: {\n ...theme.typography.h5,\n margin: theme.spacing(4),\n },\n text: {\n ...theme.typography.subtitle1,\n marginBottom: theme.spacing(4),\n },\n email: {\n ...theme.typography.subtitle1,\n fontWeight: \"bold\",\n color: theme.palette.primary.main,\n },\n resendButton: {\n textTransform: \"capitalize\",\n marginBottom: theme.spacing(2),\n },\n })\n);\n\nfunction ResetPasswordMailSentPage(\n props: ResetPasswordMailSentPageProps &\n RouteComponentProps &\n LocalizeContextProps\n) {\n const classes = useStyles();\n const urlParams = queryString.parse(window.location.search);\n const [mailSentFlag, setMailSentFlag] = useState(false);\n const [isLoading, setLoading] = useState(false);\n\n const email = decodeURIComponent(urlParams[QUERY_PARAM_EMAIL] as string);\n\n const resendMailRequest = () => {\n setLoading(true);\n\n return client\n .sendSpecialistResetPasswordMail({\n email,\n redirectURL: `${window.location.origin}${getResetPasswordURL(\n urlParams as URLParams\n )}`,\n })\n .then(() => setLoading(false))\n .catch(console.error);\n };\n\n const handleClick = async () => {\n if (mailSentFlag) {\n return;\n }\n\n setTimeout(() => setMailSentFlag(false), 60 * 1000);\n\n setMailSentFlag(true);\n resendMailRequest();\n };\n\n const button = isLoading ? (\n \n ) : (\n \n {mailSentFlag ? (\n \n ) : (\n \n )}\n \n );\n\n return (\n \n \n \n \"mail\"\n \n \n \n \n {},\n }}\n />\n \n \n \n {button}\n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default withLocalize(ResetPasswordMailSentPage);\n","export enum ClientSourceType {\n APP_PATIENT_ANDROID = \"app_patient_android\",\n APP_PATIENT_IOS = \"app_patient_ios\",\n WEB_SPECIALIST = \"web_specialist\",\n}\n\nexport const appSourceTypes = [\n ClientSourceType.APP_PATIENT_ANDROID,\n ClientSourceType.APP_PATIENT_IOS,\n];\n","import { UIErrorMessageType } from \"@im-fine/ui-libs\";\nimport {\n Box,\n Button,\n Container,\n FormControl,\n Grid,\n Paper,\n TextField,\n Theme,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport ErrorIcon from \"@material-ui/icons/Error\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport queryString from \"query-string\";\nimport React, { useEffect, useState } from \"react\";\nimport { LocalizeContextProps, Translate, withLocalize } from \"react-localize-redux\";\nimport { StaticContext } from \"react-router\";\nimport { RouteComponentProps } from \"react-router-dom\";\nimport client from \"../api/client\";\nimport { appSourceTypes, ClientSourceType } from \"../api/objects/ClientSourceType\";\nimport { enabledLanguages, getDefaultLanguage, LanguageType } from \"../api/objects/language\";\nimport PasswordResetSVG from \"../assets/images/undraw_authentication_fsn5.svg\";\nimport { Copyright } from \"../components/Footer\";\nimport { LanguageChanger } from \"../components/LanguageChanger\";\nimport { Top } from \"../components/Top\";\nimport {\n DEFAULT_REDIRECT_URL,\n PASSWORD_MAX_LENGTH,\n PASSWORD_MIN_LENGTH,\n QUERY_PARAM_ACCESS_TOKEN,\n QUERY_PARAM_EMAIL,\n QUERY_PARAM_ERROR_ID,\n QUERY_PARAM_LANGUAGE,\n QUERY_PARAM_REDIRECT_URL,\n QUERY_PARAM_SOURCE,\n} from \"../util/constants\";\nimport {\n getErrorFromQueryString,\n getLanguageFromQueryString,\n getLoginURL,\n getUnauthorizedURL,\n URLParams,\n} from \"../util/routes\";\nimport { checkPasswordLength } from \"../util/utils\";\n\nexport interface ResetPasswordPageProps {}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n body: {\n backgroundColor: theme.palette.common.white,\n },\n },\n errorText: {\n verticalAlign: \"bottom\",\n marginLeft: theme.spacing(0.5),\n },\n paper: {\n marginTop: theme.spacing(8),\n display: \"flex\",\n padding: theme.spacing(5),\n\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n form: {\n width: \"100%\", // Fix IE 11 issue.\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n image: {\n width: \"100%\",\n maxWidth: \"15rem\",\n margin: theme.spacing(1),\n },\n cancelLink: {\n color: theme.palette.primary.main,\n cursor: \"pointer\",\n },\n languageDropdown: {},\n })\n);\n\nfunction ResetPasswordPage({\n translate,\n activeLanguage,\n ...props\n}: ResetPasswordPageProps & RouteComponentProps & LocalizeContextProps) {\n const classes = useStyles();\n const urlParams = queryString.parse(window.location.search);\n\n const [accessToken] = useState(urlParams[QUERY_PARAM_ACCESS_TOKEN] as string);\n\n const redirectURL = decodeURIComponent(\n (urlParams[QUERY_PARAM_REDIRECT_URL] as string) ?? DEFAULT_REDIRECT_URL\n );\n\n const clientSource: ClientSourceType | undefined = urlParams[QUERY_PARAM_SOURCE]\n ? (decodeURIComponent(urlParams[QUERY_PARAM_SOURCE] as string) as ClientSourceType)\n : undefined;\n\n const [error, setError] = useState(getErrorFromQueryString(translate));\n const [email, setEmail] = useState(undefined);\n const [errorEmail, setErrorEmail] = useState(undefined);\n const [errorNewPassword, setErrorNewPassword] = useState(undefined);\n const [errorConfirmPassword, setErrorConfirmPassword] = useState(undefined);\n const [language, setLanguage] = useState(getLanguageFromQueryString() ?? getDefaultLanguage());\n const [newPassword, setNewPassword] = useState(undefined);\n const [confirmPassword, setConfirmPassword] = useState(undefined);\n const [isLoading, setLoading] = useState(false);\n\n const isAppClientSource = React.useMemo(\n () => Boolean(clientSource && appSourceTypes.includes(clientSource)),\n [clientSource]\n );\n\n useEffect(() => {\n if (confirmPassword !== newPassword && confirmPassword) {\n setErrorConfirmPassword(translate(\"confirm_password_no_match\") as string);\n } else {\n setErrorConfirmPassword(undefined);\n }\n }, [newPassword, confirmPassword, translate]);\n\n useEffect(() => {\n if (!accessToken) {\n setError(translate(\"password_reset_no_access_token\") as string);\n window.location.assign(\n getUnauthorizedURL({\n [QUERY_PARAM_ERROR_ID]: \"password_reset_no_access_token\",\n ...urlParams,\n } as URLParams)\n );\n }\n }, [accessToken, urlParams, translate]);\n\n useEffect(() => {\n if (!email && accessToken && !isLoading) {\n setLoading(true);\n\n client\n .getAuthenticatedUserForToken(accessToken)\n .then((user) => {\n if (!email) {\n setEmail(user.email);\n }\n if (user.language && !urlParams[QUERY_PARAM_LANGUAGE]) {\n setLanguage(user.language);\n }\n setLoading(false);\n })\n .catch((error) => setError(error.message));\n }\n }, [email, accessToken, isLoading, urlParams]);\n\n const handleNewPasswordChange = (event: React.ChangeEvent) => {\n const newValue = event.target.value;\n setErrorNewPassword(undefined);\n setNewPassword(newValue);\n if (!checkPasswordLength(newValue)) {\n setErrorNewPassword(\n translate(\"incorrect_password_length\", {\n min: PASSWORD_MIN_LENGTH,\n max: PASSWORD_MAX_LENGTH,\n }) as string\n );\n }\n };\n\n const handleConfirmPasswordChange = (event: React.ChangeEvent) => {\n setConfirmPassword(event.target.value);\n setErrorConfirmPassword(undefined);\n };\n\n const handleCancelRequestClick = async (event: any) => {\n event.preventDefault();\n if (isLoading) {\n return false;\n }\n\n try {\n setLoading(true);\n await client.cancelPasswordReset(accessToken);\n props.history.push(getLoginURL(linkParams), {});\n setLoading(false);\n } catch (error) {\n setError(error);\n console.error(error);\n }\n };\n\n const clearErrors = () => {\n setErrorEmail(undefined);\n setErrorNewPassword(undefined);\n setErrorConfirmPassword(undefined);\n setError(undefined);\n };\n\n const handleLanguageChange = (newLanguage: LanguageType) => {\n setLanguage(newLanguage);\n props.setActiveLanguage(newLanguage);\n };\n\n const callResetPassword = async () => {\n try {\n setLoading(true);\n clearErrors();\n if (newPassword === undefined || newPassword.length === 0) {\n setErrorNewPassword(\"Empty password.\");\n return;\n }\n if (\n confirmPassword === undefined ||\n confirmPassword.length === 0 ||\n confirmPassword !== newPassword\n ) {\n setErrorNewPassword(translate(\"password_reset_no_access_token\") as string);\n return;\n }\n\n const resetUser = await client.resetPassword(accessToken, newPassword);\n\n if (!isAppClientSource) {\n let loginEmail = email ?? resetUser.email;\n if (!loginEmail) {\n setError(\"No email set for login\");\n return;\n }\n await client.login(loginEmail, newPassword);\n }\n\n window.location.assign(redirectURL);\n } catch (error) {\n console.error(error);\n // if (\n // typeof error.message === \"string\" &&\n // error.message.toLowerCase().includes(\"email\")\n // ) {\n // setErrorEmail(error.message);\n // } else if (\n // typeof error.message === \"string\" &&\n // error.message.toLowerCase().includes(\"password\")\n // ) {\n // setErrorNewPassword(error.message);\n // } else {\n setError(error.message);\n // }\n } finally {\n setLoading(false);\n }\n };\n\n const handleResetPasswordClick = async (event: any) => {\n event.preventDefault();\n return await callResetPassword();\n };\n\n const linkParams: { [key: string]: string } = {\n ...urlParams,\n [QUERY_PARAM_LANGUAGE]: language,\n };\n\n if (email && email.trim().length > 0) {\n linkParams[QUERY_PARAM_EMAIL] = encodeURIComponent(email);\n }\n\n if (redirectURL !== DEFAULT_REDIRECT_URL) {\n linkParams[QUERY_PARAM_REDIRECT_URL] = redirectURL;\n }\n\n return (\n \n \n \n \"mail\"\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n {!isAppClientSource && (\n \n \n \n \n \n )}\n \n \n
\n \n \n \n
\n );\n}\n\nexport default withLocalize(ResetPasswordPage);\n","import { UIErrorMessageType } from \"@im-fine/ui-libs\";\nimport {\n Avatar,\n Box,\n Button,\n Container,\n Grid,\n Paper,\n TextField,\n Theme,\n Typography,\n} from \"@material-ui/core\";\nimport ErrorIcon from \"@material-ui/icons/Error\";\nimport { createStyles, makeStyles } from \"@material-ui/styles\";\nimport queryString from \"query-string\";\nimport React, { useState } from \"react\";\nimport { LocalizeContextProps, Translate, withLocalize } from \"react-localize-redux\";\nimport { StaticContext } from \"react-router\";\nimport { RouteComponentProps } from \"react-router-dom\";\nimport client from \"../api/client\";\nimport { enabledLanguages, getDefaultLanguage, LanguageType } from \"../api/objects/language\";\nimport AvatarSVG from \"../assets/images/undraw_forgot_password_gi2d.svg\";\nimport { Copyright } from \"../components/Footer\";\nimport { LanguageChanger } from \"../components/LanguageChanger\";\nimport { Top } from \"../components/Top\";\nimport StyledLink from \"../navigation/StyledLink\";\nimport {\n DEFAULT_REDIRECT_URL,\n QUERY_PARAM_EMAIL,\n QUERY_PARAM_LANGUAGE,\n QUERY_PARAM_REDIRECT_URL,\n} from \"../util/constants\";\nimport {\n getErrorFromQueryString,\n getLanguageFromQueryString,\n getLoginURL,\n getResetPasswordMailSentURL,\n getResetPasswordURL,\n} from \"../util/routes\";\n\nexport interface ResetPasswordRequestPageProps {}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n body: {\n backgroundColor: theme.palette.common.white,\n },\n },\n errorText: {\n verticalAlign: \"bottom\",\n marginLeft: theme.spacing(0.5),\n },\n paper: {\n marginTop: theme.spacing(8),\n display: \"flex\",\n padding: theme.spacing(5),\n\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n avatar: {\n height: 70,\n width: 70,\n margin: theme.spacing(1),\n },\n form: {\n width: \"100%\", // Fix IE 11 issue.\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n languageDropdown: {},\n })\n);\n\nfunction ResetPasswordRequestPage(\n props: ResetPasswordRequestPageProps &\n RouteComponentProps &\n LocalizeContextProps\n) {\n const classes = useStyles();\n const urlParams = queryString.parse(window.location.search);\n\n const redirectURL = (urlParams[QUERY_PARAM_REDIRECT_URL] as string) ?? DEFAULT_REDIRECT_URL;\n const [error, setError] = useState(\n getErrorFromQueryString(props.translate)\n );\n const [errorEmail, setErrorEmail] = useState(undefined);\n const [language, setLanguage] = useState(getLanguageFromQueryString() ?? getDefaultLanguage());\n const [email, setEmail] = useState(\n urlParams[QUERY_PARAM_EMAIL]\n ? decodeURIComponent(urlParams[QUERY_PARAM_EMAIL] as string)\n : \"\"\n );\n const [isLoading, setLoading] = useState(false);\n\n const handleEmailChange = (event: React.ChangeEvent) => {\n setErrorEmail(undefined);\n setEmail(event.target.value);\n };\n\n const clearErrors = () => {\n setErrorEmail(undefined);\n setError(undefined);\n };\n\n const handleLanguageChange = (newLanguage: LanguageType) => {\n setLanguage(newLanguage);\n props.setActiveLanguage(newLanguage);\n };\n\n const callResetRequest = async () => {\n try {\n setLoading(true);\n clearErrors();\n if (email === undefined || email.trim().length === 0) {\n setErrorEmail(\"Empty email.\");\n return;\n }\n\n const resetPasswordParams = JSON.parse(JSON.stringify(linkParams));\n delete resetPasswordParams[QUERY_PARAM_EMAIL];\n\n await client.sendSpecialistResetPasswordMail({\n email: email.trim().toLowerCase(),\n redirectURL: `${window.location.origin}${getResetPasswordURL(resetPasswordParams)}`,\n });\n\n props.history.push(getResetPasswordMailSentURL(linkParams), {});\n } catch (error) {\n console.error(error);\n if (\n typeof error.message === \"string\" &&\n error.message.toLowerCase().includes(\"email\")\n ) {\n setErrorEmail(error.message);\n } else {\n setError(error.message);\n }\n } finally {\n setLoading(false);\n }\n };\n\n const handleResetRequestClick = async (event: any) => {\n event.preventDefault();\n return await callResetRequest();\n };\n\n const linkParams: { [key: string]: string } = {\n ...urlParams,\n [QUERY_PARAM_LANGUAGE]: language,\n };\n\n if (email.trim().length > 0) {\n linkParams[QUERY_PARAM_EMAIL] = encodeURIComponent(email);\n }\n\n if (redirectURL !== DEFAULT_REDIRECT_URL) {\n linkParams[QUERY_PARAM_REDIRECT_URL] = redirectURL;\n }\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
\n );\n}\n\nexport default withLocalize(ResetPasswordRequestPage);\n","import { Box, Button, Menu, MenuItem } from \"@material-ui/core\";\nimport * as React from \"react\";\nimport { Translate } from \"react-localize-redux\";\nimport { Gender } from \"../api/objects/User\";\nimport GenderFemaleSVG from \"../assets/images/gender_female.svg\";\nimport GenderMaleSVG from \"../assets/images/gender_male.svg\";\nimport GenderUnspecifiedSVG from \"../assets/images/gender_unspecified.svg\";\n\nexport interface GenderChangerProps {\n selectedGender: Gender;\n enabledGenders: Gender[];\n linkClassNames?: string;\n dropdownClassNames?: string;\n containerClassNames?: string;\n id?: string;\n title?: string;\n onChange: (newLanguage: Gender) => void;\n}\n\nexport const mapGenderToIconElement = (gender: Gender) => {\n let icon = GenderUnspecifiedSVG;\n switch (gender) {\n case Gender.FEMALE:\n case Gender.TRANSGENDER_FEMALE:\n icon = GenderFemaleSVG;\n break;\n case Gender.MALE:\n case Gender.TRANSGENDER_MALE:\n icon = GenderMaleSVG;\n break;\n case Gender.UNSPECIFIED:\n icon = GenderUnspecifiedSVG;\n break;\n }\n return (\n \n );\n};\n\nexport const GenderChanger = (props: GenderChangerProps) => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const id = props.id || \"gender-changer__dropdown\";\n const linkClassNames = props.linkClassNames || \"\";\n const dropdownClassNames = props.dropdownClassNames || \"\";\n const containerClassNames = props.containerClassNames || \"\";\n const title = props.title || \"Change language\"; //TODO #translate\n\n const handleClick = (event: any) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const genderItems = props.enabledGenders.map((gender) => (\n {\n props.onChange(gender);\n handleClose();\n }}\n >\n {mapGenderToIconElement(gender)}\n \n Unspecified\n \n \n ));\n\n return (\n
\n \n {mapGenderToIconElement(props.selectedGender)}\n \n \n props.selectedGender\n \n \n \n \n {genderItems}\n \n
\n );\n};\n","import { UIErrorMessageType } from \"@im-fine/ui-libs\";\nimport {\n Box,\n Button,\n Checkbox,\n Container,\n createStyles,\n FormControl,\n FormControlLabel,\n FormLabel,\n Grid,\n IconButton,\n InputAdornment,\n Link,\n makeStyles,\n Paper,\n TextField,\n Theme,\n Typography,\n} from \"@material-ui/core\";\nimport ErrorIcon from \"@material-ui/icons/Error\";\nimport Visibility from \"@material-ui/icons/Visibility\";\nimport VisibilityOff from \"@material-ui/icons/VisibilityOff\";\nimport queryString from \"query-string\";\nimport React, { useCallback, useState } from \"react\";\nimport { LocalizeContextProps, Translate, withLocalize } from \"react-localize-redux\";\nimport { StaticContext } from \"react-router\";\nimport { RouteComponentProps } from \"react-router-dom\";\nimport client from \"../api/client\";\nimport { enabledLanguages, getDefaultLanguage, LanguageType } from \"../api/objects/language\";\nimport { Gender } from \"../api/objects/User\";\nimport NewSpecialistIcon from \"../assets/images/undraw_windy_day_x63l.svg\";\nimport AppleLoginButton from \"../components/AppleLoginButton\";\nimport { Copyright } from \"../components/Footer\";\nimport { GenderChanger } from \"../components/GenderChanger\";\nimport GoogleLoginButton from \"../components/GoogleLoginButton\";\nimport { LanguageChanger } from \"../components/LanguageChanger\";\nimport OrDividerRow from \"../components/OrDividerRow\";\nimport { Top } from \"../components/Top\";\nimport StyledLink from \"../navigation/StyledLink\";\nimport {\n DEFAULT_REDIRECT_URL,\n PASSWORD_MAX_LENGTH,\n PASSWORD_MIN_LENGTH,\n QUERY_PARAM_EMAIL,\n QUERY_PARAM_LANGUAGE,\n QUERY_PARAM_REDIRECT_URL,\n} from \"../util/constants\";\nimport { getErrorFromQueryString, getLanguageFromQueryString, getLoginURL } from \"../util/routes\";\nimport { checkPasswordLength } from \"../util/utils\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n body: {\n backgroundColor: theme.palette.common.white,\n },\n },\n errorText: {\n verticalAlign: \"bottom\",\n marginLeft: theme.spacing(0.5),\n },\n paper: {\n [theme.breakpoints.up(1920)]: {\n marginTop: theme.spacing(25),\n },\n [theme.breakpoints.up(1367)]: {\n marginTop: theme.spacing(15),\n },\n [theme.breakpoints.down(1366)]: {\n marginTop: theme.spacing(1),\n },\n display: \"flex\",\n padding: theme.spacing(5),\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n title: {\n marginBottom: theme.spacing(2),\n },\n icon: {\n height: \"10rem\",\n width: \"100%\",\n margin: theme.spacing(1),\n },\n form: {\n width: \"100%\", // Fix IE 11 issue.\n marginTop: theme.spacing(0.5),\n },\n languageDropdown: {\n textAlign: \"right\",\n },\n genderDropdown: {\n textAlign: \"right\",\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n link: {\n textDecoration: \"none\",\n \"&:focus, &:hover, &:visited, &:link, &:active\": {\n textDecoration: \"none\",\n },\n },\n socialLoginContainer: {\n marginBottom: theme.spacing(2),\n },\n textCenter: {\n textAlign: \"center\",\n },\n })\n);\n\nexport interface SignupPageProps {}\n\nfunction SignupPage(\n props: SignupPageProps & RouteComponentProps & LocalizeContextProps\n) {\n const classes = useStyles();\n const urlParams = queryString.parse(window.location.search);\n\n const redirectURL = (urlParams[QUERY_PARAM_REDIRECT_URL] as string) ?? DEFAULT_REDIRECT_URL;\n const [error, setError] = useState(\n getErrorFromQueryString(props.translate)\n );\n const [email, setEmail] = useState(\n urlParams[QUERY_PARAM_EMAIL]\n ? decodeURIComponent(urlParams[QUERY_PARAM_EMAIL] as string)\n : \"\"\n );\n const [errorEmail, setErrorEmail] = useState(undefined);\n const [errorPassword, setErrorPassword] = useState(undefined);\n const [language, setLanguage] = useState(getLanguageFromQueryString() ?? getDefaultLanguage());\n const [gender, setGender] = useState(Gender.UNSPECIFIED);\n const [password, setPassword] = useState(\"\");\n const [isLoading, setLoading] = useState(false);\n const [showPassword, setShowPassword] = useState(false);\n const [userAgree, setUserAgree] = useState(false);\n\n const linkParams: { [key: string]: string } = {\n ...urlParams,\n [QUERY_PARAM_LANGUAGE]: language,\n };\n\n if (email.trim().length > 0) {\n linkParams[QUERY_PARAM_EMAIL] = encodeURIComponent(email);\n }\n\n if (redirectURL !== DEFAULT_REDIRECT_URL) {\n linkParams[QUERY_PARAM_REDIRECT_URL] = redirectURL;\n }\n\n const clearErrors = () => {\n setErrorEmail(undefined);\n setErrorPassword(undefined);\n setError(undefined);\n };\n\n const handleEmailChange = (event: React.ChangeEvent) => {\n setErrorEmail(undefined);\n setEmail(event.target.value);\n };\n\n const handlePasswordChange = (event: React.ChangeEvent) => {\n const newValue = event.target.value;\n setErrorPassword(undefined);\n setPassword(newValue);\n if (!checkPasswordLength(newValue)) {\n setErrorPassword(\n props.translate(\"incorrect_password_length\", {\n min: PASSWORD_MIN_LENGTH,\n max: PASSWORD_MAX_LENGTH,\n }) as string\n );\n }\n };\n\n const handleLanguageChange = (newLanguage: LanguageType) => {\n setLanguage(newLanguage);\n props.setActiveLanguage(newLanguage);\n };\n\n const handleGenderChange = (newGender: Gender) => {\n setGender(newGender);\n };\n\n const handleGoogleLoginSuccess = useCallback(\n async (googleUser: gapi.auth2.GoogleUser) => {\n setLoading(true);\n\n // const authData = googleUser.getAuthResponse(true);\n const authData = googleUser.getAuthResponse();\n\n try {\n clearErrors();\n /*const result = */ await client.loginOrSignUpWithGoogleSpecialist({\n googleIdToken: authData.id_token,\n });\n // console.debug(\"result\", result);\n\n window.location.assign(redirectURL);\n } catch (error) {\n setError(error.message);\n } finally {\n setLoading(false);\n }\n },\n [redirectURL]\n );\n\n const handleSignupClick = useCallback(\n async (event: any) => {\n try {\n event.preventDefault();\n setLoading(true);\n clearErrors();\n if (email === undefined || email.trim().length === 0) {\n setErrorEmail(\"Empty email.\");\n return false;\n }\n if (password === undefined || password.length === 0) {\n setErrorPassword(\"Empty password.\");\n return false;\n }\n\n await client.createUserSpecialist({\n email: email.trim().toLowerCase(),\n password,\n language,\n gender,\n });\n\n window.location.assign(redirectURL);\n } catch (error) {\n console.error(error);\n if (\n typeof error.message === \"string\" &&\n error.message.toLowerCase().includes(\"email\")\n ) {\n setErrorEmail(error.message);\n } else if (\n typeof error.message === \"string\" &&\n error.message.toLowerCase().includes(\"password\")\n ) {\n setErrorPassword(error.message);\n } else {\n setError(error.message);\n }\n } finally {\n setLoading(false);\n }\n },\n [email, gender, language, password, redirectURL]\n );\n\n return (\n \n \n \n \"new\n \n \n \n \n
\n \n \n \n setShowPassword(true)}\n onMouseUp={() => setShowPassword(false)}\n >\n {showPassword ? : }\n \n \n ),\n }}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n setUserAgree((prevState) => !prevState)}\n color=\"primary\"\n />\n }\n label={\n <>\n \n \n \n \n \n \n \n \n \n }\n />\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n
\n \n \n \n
\n );\n}\n\nexport default withLocalize(SignupPage);\n","import {\n Box,\n Button,\n CircularProgress,\n Container,\n createStyles,\n Grid,\n Link,\n makeStyles,\n Paper,\n Theme,\n Typography,\n} from \"@material-ui/core\";\nimport clsx from \"clsx\";\nimport queryString from \"query-string\";\nimport React, { useEffect, useState } from \"react\";\nimport { LocalizeContextProps, Translate, withLocalize } from \"react-localize-redux\";\nimport { StaticContext } from \"react-router\";\nimport { RouteComponentProps } from \"react-router-dom\";\nimport client from \"../api/client\";\nimport SecuritySVG from \"../assets/images/undraw_security_o890.svg\";\nimport { Copyright } from \"../components/Footer\";\nimport OrDividerRow from \"../components/OrDividerRow\";\nimport { Top } from \"../components/Top\";\nimport StyledLink from \"../navigation/StyledLink\";\nimport { DEFAULT_REDIRECT_URL, QUERY_PARAM_REDIRECT_URL } from \"../util/constants\";\nimport { getErrorFromQueryString, getLoginURL, getSignupURL } from \"../util/routes\";\n\nexport interface UnauthorizedPageProps {}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n body: {\n backgroundColor: theme.palette.common.white,\n },\n },\n errorText: {\n verticalAlign: \"bottom\",\n marginLeft: theme.spacing(0.5),\n },\n paper: {\n marginTop: theme.spacing(8),\n display: \"flex\",\n padding: theme.spacing(5),\n\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n icon: {\n height: \"10rem\",\n width: \"100%\",\n margin: theme.spacing(1),\n },\n avatar: {\n height: 50,\n width: 50,\n margin: theme.spacing(1),\n backgroundColor: theme.palette.error.main,\n },\n row: {\n width: \"100%\", // Fix IE 11 issue.\n marginTop: theme.spacing(1),\n textAlign: \"center\",\n },\n callToAction: {\n width: \"100%\", // Fix IE 11 issue.\n textAlign: \"center\",\n marginTop: theme.spacing(3),\n },\n loginButton: {\n margin: theme.spacing(1, 0, 2),\n },\n progress: {\n margin: theme.spacing(2),\n },\n title: {\n fontWeight: theme.typography.fontWeightBold,\n },\n textCenter: {\n textAlign: \"center\",\n },\n })\n);\n\nfunction UnauthorizedPage(\n props: UnauthorizedPageProps &\n RouteComponentProps &\n LocalizeContextProps\n) {\n const classes = useStyles(props);\n const urlParams = queryString.parse(window.location.search);\n\n const redirectURL = (urlParams[QUERY_PARAM_REDIRECT_URL] as string) || DEFAULT_REDIRECT_URL;\n const error =\n getErrorFromQueryString(props.translate) ??\n (props.translate(\"unauthorized_default_message\") as string);\n const [authenticatedEmail, setAuthenticatedEmail] = useState();\n const [checkedToken, setCheckedToken] = useState(false);\n const [isLoading, setLoading] = useState(false);\n // const [language, setLanguage] = useState(/*getDefaultLanguage()*/ getBrowserLanguage());\n\n const linkParams = {\n ...urlParams,\n [QUERY_PARAM_REDIRECT_URL]: encodeURIComponent(redirectURL),\n };\n\n // const handleLanguageChange = (newLanguage: LanguageType) => {\n // setLanguage(newLanguage);\n // props.setActiveLanguage(newLanguage);\n // };\n\n useEffect(() => {\n if (!checkedToken && !isLoading) {\n setLoading(true);\n client\n .getAuthenticatedUser()\n .then((user) => {\n setAuthenticatedEmail(user.email);\n setCheckedToken(true);\n })\n .catch((error) => {\n // console.error(error);\n setAuthenticatedEmail(undefined);\n setCheckedToken(true);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, [checkedToken, isLoading]);\n\n return (\n \n \n \n \"Security\"\n \n \n \n \n \n \n \n \n );\n}\n\nexport default withLocalize(UnauthorizedPage);\n","import { createMuiTheme } from \"@material-ui/core/styles\";\n\n// const mainColor = '#1FAAE6';\nconst mainColor = \"#0070e1\";\nconst mainContrastColor = \"#FFFFFF\";\n\nconst theme = createMuiTheme({\n palette: {\n primary: {\n main: mainColor,\n contrastText: mainContrastColor,\n },\n },\n});\n\nexport default theme;\n","import { translationTransform } from \"@im-fine/ui-libs\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { ThemeProvider } from \"@material-ui/styles\";\nimport React, { useEffect, useState } from \"react\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport { LocalizeContextProps, withLocalize } from \"react-localize-redux\";\nimport { BrowserRouter as Router, Route, Switch } from \"react-router-dom\";\nimport { enabledLanguages, getDefaultLanguage } from \"./api/objects/language\";\nimport { TranslationExportType } from \"./api/translation/APITranslation\";\nimport { TranslationsLanguageKeyObject } from \"./api/translation/objects/Translation\";\nimport translationClient from \"./api/translationClient\";\nimport \"./App.css\";\nimport cachedTranslations from \"./assets/translations/cached.translations.json\";\nimport FullPageLoading from \"./components/FullPageLoading\";\nimport AccountsPage from \"./pages/AccountsPage\";\nimport LoginPage from \"./pages/LoginPage\";\nimport ResetPasswordMailSentPage from \"./pages/ResetPasswordMailSentPage\";\nimport ResetPasswordPage from \"./pages/ResetPasswordPage\";\nimport ResetPasswordRequestPage from \"./pages/ResetPasswordRequestPage\";\nimport SignupPage from \"./pages/SignupPage\";\nimport UnauthorizedPage from \"./pages/UnauthorizedPage\";\nimport theme from \"./theme/theme\";\nimport {\n getAccountsURL,\n getLanguageFromQueryString,\n getLoginURL,\n getResetPasswordMailSentURL,\n getResetPasswordURL,\n getResetRequestURL,\n getSignupURL,\n getUnauthorizedURL,\n} from \"./util/routes\";\n\ninterface AppProps {}\n\nconst App = ({ initialize, addTranslation, ...props }: AppProps & LocalizeContextProps) => {\n const [isLoading, setLoading] = useState(true);\n const [isDataLoaded, setDataLoaded] = useState(false);\n\n useEffect(() => {\n if (!isDataLoaded) {\n setLoading(true);\n setDataLoaded(true);\n\n // console.debug(\"CachedTranslations\", cachedTranslations);\n initialize({\n languages: enabledLanguages,\n options: {\n renderToStaticMarkup,\n defaultLanguage: getLanguageFromQueryString() ?? getDefaultLanguage(),\n ignoreTranslateChildren: true,\n },\n translation: translationTransform(\n cachedTranslations.translations,\n enabledLanguages\n ),\n });\n\n const getTranslations = async () => {\n const translationDataFromAPI = (await translationClient.getTranslations(\n TranslationExportType.BY_KEY_OBJECT\n )) as TranslationsLanguageKeyObject;\n // console.debug(\"getTranslations\", translationDataFromAPI);\n addTranslation(translationTransform(translationDataFromAPI, enabledLanguages));\n };\n\n getTranslations()\n .catch((error) => {\n console.error(error);\n })\n .finally(() => {\n setLoading(false);\n });\n }\n }, [isDataLoaded, initialize, addTranslation]);\n\n return (\n \n \n\n {isLoading ? (\n \n ) : (\n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n );\n};\n\nexport default withLocalize(App);\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service \" +\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\");\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\"No internet connection found. App is running in offline mode.\");\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister();\n });\n }\n}\n","import \"flag-icon-css/css/flag-icon.min.css\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport App from \"./App\";\nimport * as serviceWorker from \"./serviceWorker\";\nimport { LocalizeProvider } from \"react-localize-redux\";\n\nconst Root = () => (\n \n \n \n);\n\nReactDOM.render(, document.getElementById(\"root\"));\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","export const getEnvVariable = (envVarName: string): string => {\n if (\n typeof process.env[envVarName] !== \"string\" ||\n (process.env[envVarName] as string).trim().length === 0\n ) {\n throw new Error(`Invalid process.env.${envVarName}`);\n }\n\n return (process.env[envVarName] as string).trim();\n};\n\nexport const getEnvURL = (envURL: string): string => {\n let returnURL;\n const url = new URL(envURL);\n\n if (process.env.REACT_APP_API_SAME_ORIGIN === \"true\") {\n returnURL = `${window.location.origin}${url.pathname}${url.search}${url.hash}`;\n } else if (process.env.REACT_APP_API_SAME_HOST === \"true\") {\n returnURL = `${url.protocol}//${window.location.hostname}:${url.port}${url.pathname}${url.search}${url.hash}`;\n } else {\n returnURL = envURL.trim();\n }\n\n if (!returnURL) {\n throw new Error(`Env URL cannot be parsed: ${envURL}.`);\n }\n\n return returnURL;\n};\n\nexport const getRootAPI = (): string => {\n if (\n process.env.REACT_APP_API_URL === undefined ||\n process.env.REACT_APP_API_URL.trim().length === 0\n ) {\n throw new Error(\"Invalid process.env.REACT_APP_API_URL\");\n }\n\n let rootAPI = getEnvURL(process.env.REACT_APP_API_URL);\n\n if (rootAPI.endsWith(\"/\")) {\n rootAPI = rootAPI.substring(0, rootAPI.length - 1);\n }\n\n return rootAPI;\n};\n","import { ImFineError } from \"@im-fine/ui-libs\";\nimport { EventEmitter } from \"events\";\nimport { objectToQueryString } from \"../util/utils\";\nimport { AuthorizeRequest } from \"./objects/AuthorizeRequest\";\nimport { AuthorizeURLResponse } from \"./objects/AuthorizeURLResponse\";\nimport { default as LoginResponse, default as OAuth2LoginResponse } from \"./objects/OAuth2Login\";\nimport OAuth2TokenInfo from \"./objects/OAuth2TokenInfo\";\nimport { ProviderType } from \"./objects/ProviderType\";\nimport { User } from \"./objects/User\";\n\nexport const AUTHENTICATION_URI = \"/authentication\";\n\nexport type ErrorHandler = (error: ImFineError) => boolean | void;\n\nexport interface AuthenticationClientOptions {\n apiRootURL: string;\n clientID: string;\n clientSecret?: string;\n autoRefreshClientCredentials?: boolean;\n onError?: ErrorHandler;\n userTimezone?: string;\n}\n\nexport interface FetchParams extends RequestInit {\n bodyObject?: Object | null;\n eventName?: string;\n encodeBodyInFormData?: boolean;\n includeClientAuth?: boolean;\n basicAuth?: {\n username: string;\n password: string;\n };\n}\n\ntype HeadersType = { [key: string]: string };\n\nexport class AuthenticationClient extends EventEmitter {\n protected _apiRootURL: string = \"\";\n protected _oAuth2Login?: OAuth2LoginResponse;\n protected _clientID: string;\n protected _clientSecret?: string;\n protected _isAuthenticated: boolean = false;\n protected _autoRefreshClientCredentials: boolean = false;\n protected _onError?: ErrorHandler;\n protected _refreshTimeout?: NodeJS.Timeout;\n protected _userTimezone?: string;\n\n constructor({\n apiRootURL,\n clientID,\n clientSecret,\n autoRefreshClientCredentials = true,\n onError,\n userTimezone,\n }: AuthenticationClientOptions) {\n super();\n this._apiRootURL = apiRootURL.trim();\n if (this._apiRootURL.endsWith(\"/\")) {\n this._apiRootURL = this._apiRootURL.substr(0, this._apiRootURL.length - 1);\n }\n this._clientID = clientID;\n this._clientSecret = clientSecret;\n this._autoRefreshClientCredentials = autoRefreshClientCredentials;\n this._onError = onError;\n this._userTimezone = userTimezone;\n }\n\n get accessToken(): string | undefined {\n if (!this._oAuth2Login) {\n return undefined;\n }\n\n return this._oAuth2Login.access_token;\n }\n\n get isAuthenticated() {\n return this._isAuthenticated;\n }\n\n set isAuthenticated(value: boolean) {\n if (value === this._isAuthenticated) {\n return;\n }\n\n this._isAuthenticated = value;\n if (value) {\n this.emit(AuthenticationClient.EVENT_AUTHENTICATED);\n } else {\n this.emit(AuthenticationClient.EVENT_NOT_AUTHENTICATED);\n }\n }\n\n hasAuthToken() {\n return typeof this.accessToken === \"string\" && this.accessToken.length > 0;\n }\n\n _getAuthorizationHeaderValue(token: string): string {\n return `Bearer ${token}`;\n }\n\n _getDefaultHeaders() {\n const headers: HeadersType = {\n \"Content-Type\": \"application/json\",\n };\n\n if (this.hasAuthToken()) {\n headers[\"Authorization\"] = this._getAuthorizationHeaderValue(this.accessToken || \"\");\n }\n\n if (this._userTimezone) {\n headers[\"X-User-Timezone\"] = this._userTimezone;\n }\n\n return headers;\n }\n\n async fetch(\n strURIPath: string,\n {\n method = \"GET\",\n headers = {},\n bodyObject = null,\n eventName,\n encodeBodyInFormData,\n includeClientAuth,\n basicAuth,\n ...rest\n }: FetchParams = {}\n ) {\n let body;\n if (bodyObject) {\n if (encodeBodyInFormData) {\n const formData = new FormData();\n for (const [key, value] of Object.entries(bodyObject)) {\n if (value !== undefined) {\n formData.append(key, value);\n }\n }\n\n body = formData; //.getBuffer();\n } else {\n body = JSON.stringify(bodyObject);\n }\n }\n\n if (includeClientAuth && !basicAuth) {\n basicAuth = {\n username: this._clientID,\n password: this._clientSecret || \"\",\n };\n }\n\n const objOptions = {\n method,\n credentials: \"include\",\n headers: Object.assign({}, this._getDefaultHeaders(), headers),\n body: rest.body || body,\n ...rest,\n };\n\n if (encodeBodyInFormData) {\n delete (objOptions.headers as HeadersType)[\"Content-Type\"];\n }\n\n if (basicAuth) {\n (objOptions.headers as HeadersType)[\"Authorization\"] = `Basic ${Buffer.from(\n this._clientID + \":\" + this._clientSecret || \"\"\n ).toString(\"base64\")}`;\n }\n\n if (!strURIPath.startsWith(\"/\")) {\n strURIPath = `/${strURIPath}`;\n }\n\n const strRequestURL = encodeURI(`${this._apiRootURL}${strURIPath}`);\n\n const response = await fetch(strRequestURL, objOptions as any);\n if (response.status >= 200 && response.status < 400) {\n const parsedResponse = await response.json();\n\n if (eventName) {\n this.emit(eventName, parsedResponse);\n }\n\n return parsedResponse;\n }\n\n let strErrorMessage = `AuthenticationError: Status ${response.status} - \"${response.statusText}\"`;\n const strBodyText = await response.text();\n strErrorMessage += `\\nBody: ${strBodyText}`;\n const customError = new ImFineError({\n statusCode: response.status,\n message: strErrorMessage,\n errorCode: response.status,\n });\n\n try {\n const objBody = JSON.parse(strBodyText);\n console.error(objBody);\n\n customError.error = objBody.error ?? customError.error;\n customError.errorCode = objBody.errorCode ?? customError.errorCode;\n\n customError.message =\n objBody.message ?? objBody.error_description ?? customError.message;\n } catch (error) {\n console.error(\"Not a JSON body on response.\");\n }\n\n let shouldThrowError = true;\n\n if (this._onError) {\n const errorHandlerResponse = this._onError(customError);\n shouldThrowError = errorHandlerResponse !== false;\n } else {\n this.emit(\"error\", customError.toPrivateObject());\n }\n\n if (shouldThrowError) {\n throw customError;\n }\n }\n\n async post(strURIPath: string, options: FetchParams = {}) {\n return this.fetch(strURIPath, { method: \"POST\", ...options });\n }\n\n async get(strURIPath: string, options: FetchParams = {}) {\n return this.fetch(strURIPath, { method: \"GET\", ...options });\n }\n\n async put(strURIPath: string, options: FetchParams = {}) {\n return this.fetch(strURIPath, { method: \"PUT\", ...options });\n }\n\n async delete(strURIPath: string, options: FetchParams = {}) {\n return this.fetch(strURIPath, { method: \"DELETE\", ...options });\n }\n\n async checkOwnToken(): Promise {\n return this.get(\"/token/check\");\n }\n\n async checkAccessToken(accessToken: string): Promise {\n return this.get(\"/token/check\", {\n headers: {\n Authorization: this._getAuthorizationHeaderValue(accessToken),\n },\n });\n }\n\n async getAuthenticatedUser(): Promise {\n return this.get(\"/authentication/user\");\n }\n\n async getAuthenticatedUserForToken(accessToken: string): Promise {\n return this.get(\"/authentication/user\", {\n headers: {\n Authorization: this._getAuthorizationHeaderValue(accessToken),\n },\n });\n }\n\n async getAuthorizationURLForProvider(\n providerType: ProviderType,\n request: AuthorizeRequest\n ): Promise {\n if (!request.redirectURI || !request.userRole) {\n throw new Error(\"redirectURI and userRole are required.\");\n }\n return this.get(\n `/authentication/url/authorize/${providerType}?${objectToQueryString({\n redirect_uri: request.redirectURI,\n state: request.state,\n scope: request.scopes?.join(\" \"),\n user_role: request.userRole,\n })}`\n );\n }\n\n async refreshToken(refreshToken?: string): Promise {\n this._oAuth2Login = (await this.post(\"/token/refresh\", {\n bodyObject: {\n refreshToken,\n },\n includeClientAuth: true,\n })) as LoginResponse;\n if (this._autoRefreshClientCredentials) {\n this.startAutoRefresh();\n }\n\n if (!this._isAuthenticated) {\n this._isAuthenticated = true;\n this.emit(AuthenticationClient.EVENT_AUTHENTICATED, this._oAuth2Login);\n }\n\n return this._oAuth2Login;\n }\n\n async login(email: string, password: string, scope?: string): Promise {\n const loginResponse = (await this.post(\"/login\", {\n bodyObject: {\n email,\n password,\n scope,\n },\n includeClientAuth: true,\n })) as LoginResponse;\n\n if (!loginResponse.access_token) {\n throw new Error(\"access_token property not set in response from register.\");\n }\n\n this._oAuth2Login = loginResponse;\n\n this._isAuthenticated = true;\n this.emit(AuthenticationClient.EVENT_AUTHENTICATED, loginResponse);\n\n if (this._autoRefreshClientCredentials) {\n console.debug(\"_autoRefreshClientCredentials\");\n this.startAutoRefresh();\n }\n\n return loginResponse;\n }\n\n async loginOwnCredentials(scope?: string): Promise {\n const loginResponse = (await this.post(`${AUTHENTICATION_URI}/oauth/token`, {\n bodyObject: {\n grant_type: \"client_credentials\",\n scope,\n },\n encodeBodyInFormData: true,\n includeClientAuth: true,\n })) as LoginResponse;\n\n if (!loginResponse.access_token) {\n throw new Error(\"access_token property not set in response from register.\");\n }\n\n this._oAuth2Login = loginResponse;\n\n return loginResponse;\n }\n\n startAutoRefresh() {\n if (!this._oAuth2Login) {\n throw new Error(\"Tried to start auto refresh, but the OAuth2 login data was not set.\");\n }\n\n if (this._refreshTimeout) {\n clearTimeout(this._refreshTimeout);\n }\n\n const refreshTimeoutSeconds =\n this._oAuth2Login.expires_in -\n AuthenticationClient.AUTO_REFRESH_TOKENS_EXPIRING_IN_SECONDS;\n\n this._refreshTimeout = setTimeout(() => {\n if (this.isAuthenticated && this._oAuth2Login) {\n this.refreshToken().catch((error) => console.error(error));\n }\n }, refreshTimeoutSeconds * 1000);\n\n console.debug(\n `Auto refresh the client credentials enabled for clientID \"${this._clientID}\" with a timeout of ${refreshTimeoutSeconds} seconds.`\n );\n }\n\n async logout() {\n return this.post(\"/logout\");\n }\n\n async logoutOwnCredentials() {\n this._oAuth2Login = undefined;\n this.isAuthenticated = false;\n }\n\n static readonly EVENT_AUTHENTICATED: string = \"authenticated\";\n static readonly EVENT_NOT_AUTHENTICATED: string = \"not_authenticated\";\n\n static readonly AUTO_REFRESH_TOKENS_EXPIRING_IN_SECONDS = 20;\n}\n","import querystring, { ParsedUrlQueryInput } from \"querystring\";\nimport { PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH } from \"./constants\";\n\nexport const urlQueryToObject = (query?: string) => {\n query = query || window.location.search;\n query = query.replace(\"?\", \"\");\n if (query.trim().length === 0) {\n return {};\n }\n\n try {\n return JSON.parse(\n '{\"' +\n decodeURI(query.replace(\"?\", \"\").replace(/&/g, '\",\"').replace(/=/g, '\":\"')) +\n '\"}'\n );\n } catch (error) {\n console.error(error);\n return {};\n }\n};\n\nexport const objectToQueryString = (\n queryObject?: ParsedUrlQueryInput | object,\n encodeURIComponentEnabled = true\n): string => {\n if (!queryObject) {\n return \"\";\n }\n\n return encodeURIComponentEnabled\n ? querystring.stringify(queryObject as ParsedUrlQueryInput)\n : Object.entries(queryObject).reduce((acc, [key, value]) => {\n return acc + (acc.length > 0 ? \"&\" : \"\") + `${key}=${String(value)}`;\n }, \"\");\n};\n\nexport function checkPasswordLength(value: string | undefined): boolean {\n return Boolean(\n value && value.length >= PASSWORD_MIN_LENGTH && value.length <= PASSWORD_MAX_LENGTH\n );\n}\n"],"sourceRoot":""}