@authing/react-ui-components 3.0.2-beta.5 → 3.1.1-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +1 -1
- package/LICENSE +21 -0
- package/config/env.js +26 -24
- package/config/paths.js +3 -3
- package/config/webpack.config.js +29 -7
- package/lib/index.d.ts +211 -1252
- package/lib/index.min.css +1 -2
- package/lib/index.min.js +1 -1
- package/lib/index.min.js.LICENSE.txt +0 -32
- package/package.json +14 -20
- package/scripts/build.js +83 -79
- package/scripts/start.js +73 -69
- package/scripts/test.js +23 -19
- package/{components → src/common}/AuthingDropdown/index.tsx +1 -1
- package/{components → src/common}/AuthingDropdown/style.less +0 -0
- package/{components → src/common}/AuthingTabs/index.tsx +1 -1
- package/{components → src/common}/AuthingTabs/style.less +0 -0
- package/{components → src/common}/CopyAbleText/index.tsx +1 -1
- package/{components → src/common}/CopyAbleText/style.less +0 -0
- package/{components → src/common}/VerifyCodeInput/index.tsx +0 -0
- package/{components → src/common}/VerifyCodeInput/style.less +0 -0
- package/{components → src/components}/AuthingGuard/AppMFALayout/index.tsx +2 -2
- package/{components → src/components}/AuthingGuard/AppMFALayout/style.less +0 -0
- package/{components → src/components}/AuthingGuard/CompleteUserInfoLayout/index.tsx +1 -1
- package/{components → src/components}/AuthingGuard/CompleteUserInfoLayout/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/ADLoginForm/index.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/Agreements/index.tsx +1 -1
- package/{components → src/components}/AuthingGuard/Forms/Agreements/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/CompleteUserInfoForm/index.tsx +3 -3
- package/{components → src/components}/AuthingGuard/Forms/EmailMfaVerifyForm/CheckEmailForm.tsx +4 -2
- package/{components → src/components}/AuthingGuard/Forms/EmailMfaVerifyForm/VerifyCodeForm.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/EmailMfaVerifyForm/index.tsx +1 -1
- package/{components → src/components}/AuthingGuard/Forms/EmailMfaVerifyForm/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/EmailRegisterForm/index.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/EmailRegisterForm/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/LdapLoginForm/index.tsx +4 -9
- package/{components → src/components}/AuthingGuard/Forms/LdapLoginForm/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/LoginFormFooter/index.tsx +1 -1
- package/{components → src/components}/AuthingGuard/Forms/LoginFormFooter/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/MfaResetCodeForm/Step1.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/MfaResetCodeForm/Step2.tsx +1 -1
- package/{components → src/components}/AuthingGuard/Forms/MfaResetCodeForm/index.tsx +1 -1
- package/{components → src/components}/AuthingGuard/Forms/MfaResetCodeForm/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/MfaVerifyForm/index.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/MfaVerifyForm/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/PasswordLoginForm/index.tsx +3 -3
- package/{components → src/components}/AuthingGuard/Forms/PhoneCodeLoginForm/index.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/PhoneRegisterForm/index.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/QrCodeLoginForm/index.tsx +4 -2
- package/{components → src/components}/AuthingGuard/Forms/QrCodeLoginForm/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/RegisterFormFooter/index.tsx +1 -1
- package/{components → src/components}/AuthingGuard/Forms/RegisterFormFooter/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/ResetPwdForm/Footer.tsx +1 -1
- package/{components → src/components}/AuthingGuard/Forms/ResetPwdForm/Step1.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/ResetPwdForm/Step2.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/ResetPwdForm/Step3.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/ResetPwdForm/Step4.tsx +1 -1
- package/{components → src/components}/AuthingGuard/Forms/ResetPwdForm/index.tsx +1 -1
- package/{components → src/components}/AuthingGuard/Forms/ResetPwdForm/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/SendPhoneCode/SendCodeBtn.tsx +0 -0
- package/{components → src/components}/AuthingGuard/Forms/SendPhoneCode/index.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/SendPhoneCode/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/SmsMfaVerifyForm/CheckPhoneForm.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/SmsMfaVerifyForm/VerifyCodeForm.tsx +2 -2
- package/{components → src/components}/AuthingGuard/Forms/SmsMfaVerifyForm/index.tsx +1 -1
- package/{components → src/components}/AuthingGuard/Forms/SmsMfaVerifyForm/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/SocialAndIdpLogin/index.tsx +7 -7
- package/{components → src/components}/AuthingGuard/Forms/SocialAndIdpLogin/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Forms/UploadImage/index.tsx +1 -1
- package/{components → src/components}/AuthingGuard/Forms/index.ts +0 -0
- package/{components → src/components}/AuthingGuard/GuardLayout/index.tsx +17 -3
- package/{components → src/components}/AuthingGuard/GuardLayout/style.less +0 -0
- package/{components → src/components}/AuthingGuard/Header/index.tsx +6 -3
- package/{components → src/components}/AuthingGuard/Header/style.less +23 -11
- package/{components → src/components}/AuthingGuard/IconFont/iconfont.js +0 -0
- package/{components → src/components}/AuthingGuard/IconFont/index.tsx +1 -1
- package/{components → src/components}/AuthingGuard/IconFont/style.less +0 -0
- package/{components → src/components}/AuthingGuard/IconFont/svg.js +0 -0
- package/{components → src/components}/AuthingGuard/LoginLayout/index.tsx +69 -25
- package/{components → src/components}/AuthingGuard/LoginLayout/style.less +0 -0
- package/{components → src/components}/AuthingGuard/MfaLayout/Steps.ts +0 -0
- package/{components → src/components}/AuthingGuard/MfaLayout/index.tsx +1 -1
- package/{components → src/components}/AuthingGuard/MfaLayout/style.less +0 -0
- package/{components → src/components}/AuthingGuard/RegisterLayout/index.tsx +2 -2
- package/{components → src/components}/AuthingGuard/RegisterLayout/style.less +0 -0
- package/{components → src/components}/AuthingGuard/ResetPwdLayout/index.tsx +1 -1
- package/{components → src/components}/AuthingGuard/ToggleLang/index.tsx +2 -2
- package/{components → src/components}/AuthingGuard/api/appConfig.ts +22 -14
- package/{components/_utils → src/components/AuthingGuard/api}/http.ts +33 -30
- package/{components → src/components}/AuthingGuard/api/index.ts +0 -0
- package/{components → src/components}/AuthingGuard/api/sso.ts +1 -1
- package/{components → src/components}/AuthingGuard/api/userPoolConfig.ts +3 -2
- package/{components → src/components}/AuthingGuard/constants.ts +2 -2
- package/{components → src/components}/AuthingGuard/hooks/index.tsx +0 -0
- package/{components → src/components}/AuthingGuard/hooks/useScreenSize.tsx +0 -0
- package/{components → src/components}/AuthingGuard/index.tsx +11 -3
- package/{components/_utils → src/components/AuthingGuard}/locales/en/common.json +26 -70
- package/{components/_utils → src/components/AuthingGuard}/locales/en/index.ts +0 -0
- package/{components/_utils → src/components/AuthingGuard}/locales/en/login.json +19 -21
- package/{components/_utils → src/components/AuthingGuard}/locales/en/map.json +0 -0
- package/{components/_utils → src/components/AuthingGuard}/locales/en/user.json +3 -4
- package/{components/_utils → src/components/AuthingGuard}/locales/index.ts +2 -2
- package/{components/_utils → src/components/AuthingGuard}/locales/zh/common.json +9 -53
- package/{components/_utils → src/components/AuthingGuard}/locales/zh/index.ts +0 -0
- package/{components/_utils → src/components/AuthingGuard}/locales/zh/login.json +4 -6
- package/{components/_utils → src/components/AuthingGuard}/locales/zh/map.json +0 -0
- package/{components/_utils → src/components/AuthingGuard}/locales/zh/user.json +1 -3
- package/{components → src/components}/AuthingGuard/style.less +5 -0
- package/{components → src/components}/AuthingGuard/types/Forms.ts +2 -1
- package/{components → src/components}/AuthingGuard/types/GuardConfig.ts +5 -1
- package/{components → src/components}/AuthingGuard/types/GuardState.ts +1 -1
- package/{components → src/components}/AuthingGuard/types/Locales.ts +0 -0
- package/{components → src/components}/AuthingGuard/types/index.ts +0 -0
- package/src/components/index.ts +7 -0
- package/{components → src}/context/base.tsx +0 -0
- package/{components → src}/context/global/context.tsx +0 -0
- package/{components → src}/context/global/reducer.tsx +2 -2
- package/src/index.tsx +142 -0
- package/{logo.svg → src/logo.svg} +0 -0
- package/{react-app-env.d.ts → src/react-app-env.d.ts} +0 -0
- package/{reportWebVitals.ts → src/reportWebVitals.ts} +0 -0
- package/{setupTests.ts → src/setupTests.ts} +0 -0
- package/{components/_utils → src/utils}/clipboard.ts +1 -1
- package/{components/_utils → src/utils}/index.ts +3 -149
- package/{components/_utils → src/utils}/popupCenter.ts +0 -0
- package/tsconfig.json +2 -8
- package/build/asset-manifest.json +0 -26
- package/build/favicon.ico +0 -0
- package/build/index.html +0 -1
- package/build/logo192.png +0 -0
- package/build/logo512.png +0 -0
- package/build/manifest.json +0 -25
- package/build/robots.txt +0 -3
- package/build/static/css/2.51c07e65.chunk.css +0 -3
- package/build/static/css/2.51c07e65.chunk.css.map +0 -1
- package/build/static/css/main.779f221a.chunk.css +0 -2
- package/build/static/css/main.779f221a.chunk.css.map +0 -1
- package/build/static/js/2.bbae9fdb.chunk.js +0 -3
- package/build/static/js/2.bbae9fdb.chunk.js.LICENSE.txt +0 -102
- package/build/static/js/2.bbae9fdb.chunk.js.map +0 -1
- package/build/static/js/3.fd17f196.chunk.js +0 -2
- package/build/static/js/3.fd17f196.chunk.js.map +0 -1
- package/build/static/js/main.5f341531.chunk.js +0 -2
- package/build/static/js/main.5f341531.chunk.js.map +0 -1
- package/build/static/js/runtime-main.ef138021.js +0 -2
- package/build/static/js/runtime-main.ef138021.js.map +0 -1
- package/build/static/media/loading.4a67a5f3.svg +0 -29
- package/components/BindTotp/core/bindSuccess.tsx +0 -72
- package/components/BindTotp/core/securityCode.tsx +0 -108
- package/components/BindTotp/index.tsx +0 -134
- package/components/BindTotp/interface.ts +0 -30
- package/components/BindTotp/styles.less +0 -57
- package/components/ChangeLanguage/index.tsx +0 -35
- package/components/ChangePassword/core/firstLoginReset.tsx +0 -111
- package/components/ChangePassword/core/rotateReset.tsx +0 -114
- package/components/ChangePassword/index.tsx +0 -72
- package/components/CompleteInfo/core/completeInfo.tsx +0 -155
- package/components/CompleteInfo/index.tsx +0 -45
- package/components/CompleteInfo/interface.ts +0 -40
- package/components/CompleteInfo/styles.less +0 -7
- package/components/DownloadAuthenticator/index.tsx +0 -97
- package/components/DownloadAuthenticator/interface.ts +0 -22
- package/components/DownloadAuthenticator/styles.less +0 -52
- package/components/Error/index.tsx +0 -21
- package/components/Error/interface.ts +0 -9
- package/components/Error/styles.less +0 -12
- package/components/ForgetPassword/core/resetPassword.tsx +0 -162
- package/components/ForgetPassword/index.tsx +0 -78
- package/components/ForgetPassword/interface.ts +0 -32
- package/components/Guard/Guard.tsx +0 -295
- package/components/Guard/authClient.ts +0 -44
- package/components/Guard/config.ts +0 -19
- package/components/Guard/event.ts +0 -52
- package/components/Guard/index.tsx +0 -4
- package/components/Guard/module.ts +0 -20
- package/components/Guard/stateMachine.ts +0 -152
- package/components/Guard/styles.less +0 -461
- package/components/IconFont/iconfont.js +0 -74
- package/components/IconFont/index.tsx +0 -16
- package/components/IconFont/style.less +0 -6
- package/components/IconFont/svg.js +0 -2
- package/components/ImagePro/index.tsx +0 -53
- package/components/ImagePro/styles.less +0 -40
- package/components/InputNumber/index.tsx +0 -33
- package/components/Login/codemap.ts +0 -49
- package/components/Login/core/withAD.tsx +0 -9
- package/components/Login/core/withAppQrcode.tsx +0 -49
- package/components/Login/core/withLDAP.tsx +0 -146
- package/components/Login/core/withPassword/FormItemAccount.tsx +0 -42
- package/components/Login/core/withPassword/GraphicVerifyCode.tsx +0 -30
- package/components/Login/core/withPassword/InputAccount.tsx +0 -64
- package/components/Login/core/withPassword/index.tsx +0 -173
- package/components/Login/core/withPhonecode.tsx +0 -122
- package/components/Login/core/withWechatMiniQrcode.tsx +0 -60
- package/components/Login/core/withWechatmpQrcode.tsx +0 -53
- package/components/Login/index.tsx +0 -374
- package/components/Login/props.ts +0 -74
- package/components/Login/socialLogin/index.tsx +0 -407
- package/components/Login/socialLogin/style.less +0 -69
- package/components/Login/styles.less +0 -53
- package/components/MFA/VerifyCodeInput/VerifyCodeFormItem.tsx +0 -41
- package/components/MFA/VerifyCodeInput/index.tsx +0 -145
- package/components/MFA/VerifyCodeInput/style.less +0 -35
- package/components/MFA/codemap.ts +0 -24
- package/components/MFA/core/email.tsx +0 -203
- package/components/MFA/core/face.tsx +0 -297
- package/components/MFA/core/face_deps.tsx +0 -37
- package/components/MFA/core/sms.tsx +0 -203
- package/components/MFA/core/totp.tsx +0 -122
- package/components/MFA/index.tsx +0 -143
- package/components/MFA/mfaMethods/index.tsx +0 -88
- package/components/MFA/mfaMethods/style.less +0 -39
- package/components/MFA/props.ts +0 -51
- package/components/MFA/styles.less +0 -100
- package/components/NeedHelpView/core/describeQuestions.tsx +0 -245
- package/components/NeedHelpView/index.tsx +0 -47
- package/components/RecoveryCode/core/useCode.tsx +0 -71
- package/components/RecoveryCode/index.tsx +0 -27
- package/components/RecoveryCode/interface.ts +0 -31
- package/components/RecoveryCode/style.less +0 -13
- package/components/Register/codemap.ts +0 -12
- package/components/Register/components/Agreements/index.tsx +0 -81
- package/components/Register/components/Agreements/style.less +0 -44
- package/components/Register/core/WithEmail.tsx +0 -242
- package/components/Register/core/WithPhone.tsx +0 -184
- package/components/Register/index.tsx +0 -139
- package/components/Register/props.ts +0 -50
- package/components/SendCode/SendCodeBtn.tsx +0 -96
- package/components/SendCode/index.tsx +0 -94
- package/components/SendCode/style.less +0 -31
- package/components/ShieldSpin/index.tsx +0 -27
- package/components/ShieldSpin/loading.svg +0 -29
- package/components/SubmitButton/index.tsx +0 -50
- package/components/SubmitSuccess/index.tsx +0 -66
- package/components/SubmitSuccess/interface.ts +0 -17
- package/components/Type/index.ts +0 -52
- package/components/ValidatorRules/ValidatorFormItem.tsx +0 -139
- package/components/ValidatorRules/index.ts +0 -20
- package/components/_utils/GuardErrorCode.ts +0 -9
- package/components/_utils/config.ts +0 -116
- package/components/_utils/guradHttp.ts +0 -101
- package/components/_utils/hooks/index.ts +0 -64
- package/components/assets/images/error.png +0 -0
- package/components/context/module/context.tsx +0 -23
- package/components/index.ts +0 -12
- package/examples.tsx +0 -87
- package/index.js +0 -1
- package/lib/static/media/loading.4a67a5f3.svg +0 -29
- package/scripts/publish.js +0 -57
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["components/_utils/config.ts","components/Guard/authClient.ts","components/_utils/GuardErrorCode.ts","components/SubmitButton/index.tsx","components/context/module/context.tsx","components/ValidatorRules/ValidatorFormItem.tsx","components/_utils/hooks/index.ts","components/Login/core/withPassword/FormItemAccount.tsx","components/InputNumber/index.tsx","components/Login/core/withPassword/InputAccount.tsx","components/ImagePro/index.tsx","components/Login/core/withPassword/GraphicVerifyCode.tsx","components/Login/core/withPassword/index.tsx","components/SendCode/SendCodeBtn.tsx","components/SendCode/index.tsx","components/Login/core/withPhonecode.tsx","components/Login/core/withLDAP.tsx","components/Login/core/withAD.tsx","components/ShieldSpin/loading.svg","components/Guard/module.ts","components/ShieldSpin/index.tsx","components/Login/core/withAppQrcode.tsx","components/Login/core/withWechatMiniQrcode.tsx","components/Login/core/withWechatmpQrcode.tsx","components/Login/codemap.ts","components/AuthingGuard/hooks/useScreenSize.tsx","components/IconFont/iconfont.js","components/IconFont/svg.js","components/Guard/config.ts","components/IconFont/index.tsx","components/Login/socialLogin/index.tsx","components/ChangeLanguage/index.tsx","components/Login/index.tsx","components/Guard/event.ts","components/Login/props.ts","components/Register/props.ts","components/MFA/VerifyCodeInput/index.tsx","components/MFA/VerifyCodeInput/VerifyCodeFormItem.tsx","components/MFA/core/email.tsx","components/MFA/core/sms.tsx","components/MFA/core/face_deps.tsx","components/MFA/core/face.tsx","components/MFA/props.ts","components/MFA/core/totp.tsx","components/DownloadAuthenticator/index.tsx","components/MFA/mfaMethods/index.tsx","components/MFA/codemap.ts","components/MFA/index.tsx","components/Register/components/Agreements/index.tsx","components/Register/core/WithEmail.tsx","components/Register/core/WithPhone.tsx","components/Register/codemap.ts","components/Register/index.tsx","components/Guard/stateMachine.ts","components/BindTotp/index.tsx","components/BindTotp/core/bindSuccess.tsx","components/BindTotp/core/securityCode.tsx","components/ForgetPassword/core/resetPassword.tsx","components/ForgetPassword/index.tsx","components/ChangePassword/core/firstLoginReset.tsx","components/ChangePassword/core/rotateReset.tsx","components/ChangePassword/index.tsx","components/NeedHelpView/core/describeQuestions.tsx","components/NeedHelpView/index.tsx","components/AuthingGuard/Forms/UploadImage/index.tsx","components/CompleteInfo/core/completeInfo.tsx","components/CompleteInfo/index.tsx","components/RecoveryCode/core/useCode.tsx","components/RecoveryCode/index.tsx","components/AuthingGuard/IconFont/iconfont.js","components/AuthingGuard/IconFont/svg.js","components/AuthingGuard/IconFont/index.tsx","components/Error/index.tsx","components/SubmitSuccess/index.tsx","components/Guard/Guard.tsx","components/context/base.tsx","components/context/global/reducer.tsx","components/context/global/context.tsx","components/_utils/popupCenter.ts","components/_utils/index.ts","components/AuthingGuard/types/GuardConfig.ts","components/_utils/locales/index.ts","components/AuthingGuard/types/GuardState.ts","components/AuthingGuard/hooks/index.tsx","components/BindTotp/interface.ts","components/CompleteInfo/interface.ts","components/DownloadAuthenticator/interface.ts","components/AuthingGuard/types/index.ts","components/_utils/http.ts","components/_utils/guradHttp.ts","components/Type/index.ts","components/index.ts","components/assets/images/error.png","reportWebVitals.ts","examples.tsx","components/AuthingGuard/constants.ts"],"names":["publicConfigMap","getPublicConfig","appId","setPublicConfig","config","initConfig","defaultConfig","a","requestPublicConfig","host","mergedConfig","mergeConfig","__publicConfig__","__appHost__","assembledAppHost","identifier","publicConfig","title","name","logo","loginMethods","loginTabs","list","passwordLoginMethods","passwordTabConfig","enabledLoginMethods","defaultLoginMethod","default","disableResetPwd","ssoPageComponentDisplay","forgetPasswordBtn","autoRegister","autoRegisterThenLoginHintInfo","registerMethods","registerTabs","defaultRegisterMethod","disableRegister","registerBtn","publicKey","agreementEnabled","agreements","contentCss","css","getGuardHttp","get","res","console","error","Error","code","data","message","authClient","ErrorCode","initAuthClient","tenantId","lang","AuthenticationClient","appHost","requestFrom","packageConfig","framework","version","onError","msg","useAuthClient","getAuthClient","SubmitButton","props","ref","useState","spin","setSpin","shaking","setShaking","useEffect","setTimeout","useImperativeHandle","text","onSpin","sp","propsCls","className","shakingCls","size","type","htmlType","loading","onClick","forwardRef","createBaseContext","checkError","Promise","reject","checkSuccess","resolve","ValidatorFormItem","userPoolId","form","checkRepeat","method","formItemProps","useGuardHttp","t","useTranslation","checked","setChecked","isReady","setIsReady","methodContent","useMemo","field","checkErrorMessage","pattern","VALIDATE_PATTERN","email","phone","checkField","fn","delay","timer","useRef","time","errorBody","body","current","clearInterval","useCallback","args","clearTimeout","useDebounce","value","test","key","Boolean","validateFields","check","values","log","checkReady","sleep","validator","rules","fieldRequiredRule","_","push","Item","validateFirst","EmailFormItem","PhoneFormItem","FormItemAccount","methods","formItemPtops","runderTemplate","length","InputNumber","onChange","propsValue","inputProps","String","setValue","valueChange","e","target","v","InputAccount","loginMethodsText","sort","placeholder","map","item","b","join","runderInput","maxLength","ImagePro","borderRadius","noSpin","alt","style","imgProps","loaded","setLoaded","w","h","width","height","getClassnames","draggable","onLoad","GraphicVerifyCode","verifyCodeUrl","changeCode","src","cursor","LoginWithPassword","post","client","submitButtonRef","showCaptcha","setShowCaptcha","setVerifyCodeUrl","remainCount","setRemainCount","captchaUrl","getCaptchaUrl","Date","encrypt","options","encryptFunction","onFinish","loginInfo","LoginMethods","Password","identity","account","password","captchaCode","onBeforeLogin","url","trim","getUserRegisterParams","customData","INPUT_CAPTCHACODE","PASSWORD_ERROR","onLogin","onFinishFailed","autoComplete","prefix","UserOutlined","color","LockOutlined","marginBottom","fontSize","display","number","SendCodeBtn","beforeSend","btnRef","buttonProps","countDown","setCountDown","timerRef","enabled","send","setInterval","prev","useSentCounter","setLoading","disabled","SendCode","onSendCodeBefore","sendEmail","validate","EmailScene","ResetPassword","sendPhone","sendSmsCode","justify","align","span","offset","then","phoneData","getFieldValue","catch","LoginWithPhoneCode","useForm","verifyCodeLength","loginByPhoneCode","u","SafetyOutlined","LoginWithLDAP","LDAP","loginByLdap","user","JSON","parse","required","addonAfter","LoginWithAD","_extends","Object","assign","i","arguments","source","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","id","transform","fillRule","strokeWidth","d","SvgLoading","_ref","svgRef","titleId","viewBox","xmlns","xmlnsXlink","undefined","GuardModuleType","ForwardRef","ShieldSpin","Spin","LoginWithAppQrcode","appQrcodeClient","qrcode","canLoop","startScanning","autoExchangeUserInfo","qrCodeScanOptions","onCodeLoaded","onStart","onSuccess","LoginWithWechatMiniQrcode","wxqrcode","ms","LoginWithWechatmpQrcode","wechatmpqrcode","ScreenSize","codeMap","APP_MFA_CODE","action","module","MFA","CHANGE_PWD","initData","inRange","n","start","end","SCREEN_SIZE_RANG","Mobile","range","Desktop","Infinity","getScreenSize","viewportWidth","document","clientWidth","find","useScreenSize","screenSize","setScreenSize","onResize","immediate","context","debounce","window","addEventListener","removeEventListener","c","l","o","m","getElementsByTagName","getAttribute","__iconfont__svg__cssinject__","write","createElement","innerHTML","setAttribute","position","overflow","firstChild","parentNode","insertBefore","appendChild","readyState","attachEvent","documentElement","doScroll","onreadystatechange","init","IconFont","xlinkHref","SocialLogin","enterpriseConnectionObjs","onGuardLogin","noLoginMethods","onMessage","evt","errMsg","event","eventType","authingCode","OTP_MFA_CODE","includes","localStorage","setItem","token","enterpriseConnections","identityProviders","filter","socialConnectionObjs","idpButtons","protocol","Protocol","OIDC","configItem","state","shortid","generate","query","qs","stringify","client_id","clientId","redirect_uri","redirectUri","scope","scopes","response_type","responseType","nonce","authorizationEdpoint","block","icon","marginRight","referer","location","href","connection","providerIentifier","popupCenter","displayName","SAML","samlRequest","CAS","casConnectionLoginUrl","OAUTH","authUrl","AZURE_AD","authorizationUrl","socialConnections","socials","provider","socialLoginButtons","HIDE_SOCIALS","isWechatBrowser","SocialConnectionProvider","WECHATMP","iconType","replace","authorization_params","BAIDU","social","authorize","parsedMsg","authingMessage","authingData","shape","socialConnectionsBtnShape","i18n","language","name_en","tooltip","idp","socialLogin","direction","flex","minHeight","ChangeLanguage","langRange","switchText","changeLang","onLangChange","inputWays","PhoneCode","AD","qrcodeWays","AppQr","WxMinQr","WechatMpQrcode","GuardLoginView","dlm","propsMethods","intersection","useMethods","defaultMethod","renderInputWay","renderQrcodeWay","loginWay","setLoginWay","setCanLoop","firstInputWay","way","firstQRcodeWay","useDisables","__codePaser","__messag","ERROR","__changeModule","__message","callback","onLoginError","inputNone","qrcodeNone","useSwitchStates","marginTop","k","onLoginTabChange","activeKey","TabPane","tab","FORGET_PWD","margin","ANY_QUESTIONS","REGISTER","eventsMapping","success","onRegister","guardEventsHijacking","events","newEvents","forEach","eventsKey","newProps","getDefaultG2Config","RegisterMethods","Email","Phone","getDefaultRegisterConfig","getDefaultGuardLocalConfig","VerifyCodeInput","gutter","onEenter","showDivider","rest","inputRef","codeInputRef","verifyCode","setVerifyCode","handleChange","val","index","num","parseInt","isNaN","codes","split","slice","focus","el","pasteEvent","preventDefault","stopPropagation","paste","clipboardData","getData","_i","Array","fill","minWidth","lineHeight","marginLeft","autoFocus","onKeyDown","currentVal","keyCode","handleKeyDown","persist","nativeEvent","isComposing","Math","floor","VerifyCodeFormItem","codeLength","ruleKeyword","BindMFAEmail","mfaToken","onBind","onValuesChange","VerifyMFAEmail","onVerify","sendCodeRef","sent","setSent","sendVerifyCode","MfaVerify","errorMessage","mfaCode","mfa","verifyAppEmailMfa","MFAEmail","userEmail","mfaLogin","setEmail","click","BindMFASms","VerifyMFASms","verifyAppSmsMfa","MFASms","userPhone","setPhone","devicesConstraints","video","getCurrentFaceDetectionNet","nets","tinyFaceDetector","dataURItoBlob","base64Data","byteString","atob","unescape","mimeString","ia","Uint8Array","charCodeAt","Blob","MFAType","MFAFace","postForm","faceState","setFaceState","percent","setPercent","videoRef","canvasRef","interval","p1","p2","cooldown","cdnBase","dashStyle","useDashoffset","loadFromUri","result","navigator","mediaDevices","getUserMedia","stream","srcObject","setShowMethods","uploadImage","blob","formData","FormData","append","getBase64","videoDom","canvas","ctx","getContext","clearRect","drawImage","toDataURL","faceLogin","goToBindScene","photoA","photoB","headers","authorization","faceBind","goToCheckScene","photo","faceCheck","quitIdentifying","faceMfaEnabled","autoShoot","paused","ended","params","TinyFaceDetectorOptions","inputSize","scoreThreshold","detectSingleFace","score","autoPlay","muted","playsInline","strokeDasharray","strokeDashoffset","cx","cy","r","opacity","BindMFATotp","changeModule","BIND_TOTP","VerifyMFATotp","useAsyncFn","totp","onSubmitCapture","MFATotp","totpMfaEnabled","DownloadType","methodTitleMapping","EMAIL","SMS","TOTP","FACE","MFAMethods","applicationMfa","onChangeMethod","currentMethod","setCurrentMethod","otherMethods","mfaPolicy","2021","LOGIN","1700","1701","1702","500","require","ComponentsMapping","GuardMFAView","showMethods","history","back","Agreements","showError","acceptList","setAcceptList","isAccept","every","dangerouslySetInnerHTML","__html","RegisterWithEmail","onBeforeRegister","acceptedAgreements","setAcceptedAgreements","validated","setValidated","registerByEmail","browser","userAgent","device","getDeviceName","generateToken","formItems","component","FormItemFC","getPasswordValidate","passwordStrength","customPasswordStrength","RegisterWithPhone","registerByPhoneCode","USER_EXISTENCE","GuardRegisterView","registerEvents","extendsFieldsEnabled","COMPLETE_INFO","_message","registerContextProps","onRegisterError","tabMapping","renderTab","defaultActiveKey","onRegisterTabChange","ActionType","GuardDownloadATView","downloadConfig","IOS","google","microsoft","Android","BindTotpType","GuardStateMachine","changeMouleEvent","order","moduleStateHistory","stateMachineLog","globalWindow","next","nextModelu","moduleData","moduleName","historyPush","backModule","splice","actionType","ChangeModule","unshift","date","getTime","dataSource","historyBack","Back","setConfig","Init","Paragraph","BindSuccess","secret","bindSuccess","copyable","valuePropName","SecurityCode","onNext","saftyCode","authenticator_type","resMessage","bindTotp","textAlign","DOWNLOAD_AT","GuardBindTotpView","setSecret","setQrcode","setUser","SECURITY_CODE","bindTotpType","setBindTotpType","LOGIN_INVALID","recovery_code","qrcode_data_url","bindInfo","fetchBindInfo","renderContent","BIND_SUCCESS","identify","setIdentify","codeMethod","setCodeMethod","newPassword","resetPasswordByEmailCode","resetPasswordByPhoneCode","onSend","onReset","onSendError","GuardForgetPassword","onPwdResetError","onPwdReset","SUBMIT_SUCCESS","onPwdPhoneSend","onPwdEmailSend","onPwdPhoneSendError","onPwdEmailSendError","FirstLoginReset","resetPasswordByFirstLoginToken","pwd","RotateReset","GuardChangePassword","DescribeQuestions","typeProblemMap","0","1","2","3","4","5","6","typeOperations","label","uploadUrl","setUploadUrl","previewVisible","setPreviewVisible","previewImage","setPreviewImage","fileList","setFileList","typeProblem","setTypeProblem","textMap","handlePreview","file","response","layout","description","images","initialValue","Option","TextArea","showCount","listType","accept","onPreview","imgUrl","PlusOutlined","visible","footer","onCancel","GuardNeedHelpView","UploadImage","uploading","setUploading","apiHost","useGuardContext","uploadButton","showUploadList","info","status","spinning","CompleteInfo","extendsFields","onRegisterInfoCompleted","onRegisterInfoCompletedError","definitions","setDefinitions","getCurrentUser","loadInitData","INPUT_MAP","image","INTERNAL_INPUT_MAP","gender","formFields","def","inputType","internalFields","userFields","entries","nameOrId","udfs","definition","updateProfile","GuardCompleteInfoView","UseCode","recoveryCode","GuardRecoveryCodeView","GuardErrorView","messages","imgSrc","GuardSubmitSuccessView","PREFIX_CLS","prefixCls","RECOVERY_CODE","Guard","startsWith","eventName","guardEventsFilter","initSettingEnd","setInitSettingEnd","initError","setInitError","setErrorMessage","GuardLocalConfig","setGuardLocalConfig","guardStateMachine","setGuardStateMachine","onPopstate","pushState","historyNext","initState","useReducer","payload","moduleState","onChangeModule","initGuardSetting","httpClient","initGuardHttp","setAppId","setTenantId","setUserpoolId","initI18n","onLoadError","insertStyles","renderModule","mode","GuardMode","Modal","closeIcon","onClose","keyboard","escCloseable","maskClosable","getContainer","React","createContext","ctxConst","useContext","payloads","useBaseContext","dualScreenLeft","screenLeft","screenX","dualScreenTop","screenTop","screenY","innerWidth","screen","innerHeight","clientHeight","systemZoom","availWidth","left","top","newWindow","open","ip","platform","os","insertedRecord","appConfig","userConfig","styles","recordKey","styleElt","styleSheet","createStyleSheet","head","styleSheets","cssText","selector","insertRule","rule","addRule","classnames","PasswordStrength","search","ignoreQueryPrefix","hostUrl","URL","splitHost","hostname","shift","PASSWORD_STRENGTH_TEXT_MAP","NoCheck","validateMessage","Low","Middle","High","AUTO","SYMBOL_TYPE_PATTERNS","getSymbolTypeLength","strength","validateMap","regex","GuardScenes","ResetPwdMethods","SocialConnections","langChangeFN","changeLanguage","localesConfig","use","LanguageDetector","initReactI18next","detection","resources","translation","enUsTrans","zhCnTrans","fallbackLng","defaultLang","debug","interpolation","escapeValue","requestClient","fetch","json","path","baseUrl","addQueryPrefix","credentials","langHeader","setBaseUrl","base","DEFAULT_LANG_HEADER","setLangHeader","GuardHttp","getHeaders","getRequestClient","userpoolId","guardHttp","defaultG2Config","clickCloseable","Normal","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","App","justifyContent","authClint","registerMethod","ReactDOM","render","getElementById","ApplicationMfaType","defaultGuardConfig","isSSO","LOGIN_METHODS_MAP","loginBtn","normal","defaultScenes","Login"],"mappings":"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","file":"static/js/main.5f341531.chunk.js","sourcesContent":["import { LoginMethods, RegisterMethods } from 'authing-js-sdk'\nimport { IG2Config } from '../Type'\nimport { ApplicationConfig } from '../AuthingGuard/api'\nimport { assembledAppHost } from '.'\nimport { getGuardHttp } from './guradHttp'\nimport { AuthingResponse } from './http'\nimport { GuardComponentConifg, GuardLocalConfig } from '../Guard/config'\n\nlet publicConfigMap: Record<string, ApplicationConfig> = {}\n\nconst getPublicConfig = (appId: string) => publicConfigMap?.[appId]\n\nconst setPublicConfig = (appId: string, config: ApplicationConfig) =>\n (publicConfigMap[appId] = config)\n\nexport const initConfig = async (\n appId: string,\n config: Partial<IG2Config>,\n defaultConfig: IG2Config\n): Promise<{ config: GuardLocalConfig; publicConfig: ApplicationConfig }> => {\n if (!getPublicConfig(appId))\n await requestPublicConfig(appId, config.host ?? defaultConfig.host)\n const mergedConfig = mergeConfig(\n config,\n defaultConfig,\n getPublicConfig(appId)\n )\n\n return {\n config: {\n ...mergedConfig,\n __publicConfig__: getPublicConfig(appId),\n __appHost__: assembledAppHost(\n getPublicConfig(appId).identifier,\n mergedConfig?.host!\n ),\n },\n publicConfig: getPublicConfig(appId),\n }\n}\n\nconst mergeConfig = (\n config: GuardComponentConifg,\n defaultConfig: IG2Config,\n publicConfig: ApplicationConfig\n): GuardLocalConfig => {\n const mergedPublicConfig: GuardLocalConfig = {\n ...defaultConfig,\n ...config,\n title: config.title ?? publicConfig.name,\n logo: !!config.logo ? config.logo : publicConfig.logo,\n loginMethods:\n config?.loginMethods ??\n (publicConfig.loginTabs?.list as LoginMethods[]) ??\n [],\n passwordLoginMethods:\n config?.passwordLoginMethods ??\n publicConfig.passwordTabConfig?.enabledLoginMethods ??\n [],\n // 默认登录方式\n defaultLoginMethod:\n config.defaultLoginMethod ??\n (publicConfig.loginTabs.default as LoginMethods),\n // 禁止重制密码\n disableResetPwd: !!(\n config.disableResetPwd ??\n !publicConfig.ssoPageComponentDisplay?.forgetPasswordBtn\n ),\n // 是否自动注册\n autoRegister:\n config.autoRegister ??\n publicConfig.ssoPageComponentDisplay.autoRegisterThenLoginHintInfo,\n registerMethods:\n config.registerMethods ??\n (publicConfig.registerTabs?.list as RegisterMethods[]),\n defaultRegisterMethod:\n config.defaultRegisterMethod ??\n (publicConfig.registerTabs.default as RegisterMethods),\n // 禁止注册\n disableRegister: !!(\n config.disableRegister ??\n !publicConfig.ssoPageComponentDisplay.registerBtn\n ),\n // publicKey\n publicKey: config.publicKey ?? publicConfig.publicKey,\n // 注册协议\n agreementEnabled: config.agreementEnabled ?? publicConfig.agreementEnabled,\n agreements: config.agreements ?? publicConfig.agreements,\n contentCss: config.contentCss ?? publicConfig.css,\n }\n\n return mergedPublicConfig\n}\n\nconst requestPublicConfig = async (\n appId: string,\n host: string\n): Promise<ApplicationConfig> => {\n let res: AuthingResponse<ApplicationConfig>\n\n const { get } = getGuardHttp()\n\n try {\n res = await get<ApplicationConfig>(\n `/api/v2/applications/${appId}/public-config`\n )\n } catch (error) {\n console.error('Please check your config or network')\n throw new Error('Please check your config or network')\n }\n\n if (res.code !== 200 || !res.data)\n throw new Error(res?.message ?? 'Please check your config')\n\n setPublicConfig(appId, res.data)\n\n return getPublicConfig(appId)\n}\n","import { AuthenticationClient } from 'authing-js-sdk'\n\nimport packageConfig from '../../package.json'\nimport { GuardLocalConfig } from './config'\n\nlet authClient: AuthenticationClient\n\nexport const initAuthClient = (\n config: GuardLocalConfig,\n appId: string,\n tenantId?: string\n) => {\n const host = config.__appHost__ ?? config.host\n const lang = config.lang\n\n if (!authClient) {\n try {\n authClient = new AuthenticationClient({\n appHost: host,\n tenantId: tenantId,\n appId,\n lang,\n requestFrom: `Guard-${packageConfig.framework}@${packageConfig.version}`,\n onError: (code, msg: any) => {\n console.error(code, msg)\n },\n })\n } catch (error) {\n throw error\n }\n }\n\n return authClient\n}\n\nexport const getAuthClient = () => {\n if (!authClient) {\n throw new Error('Please initialize AuthClient')\n }\n\n return authClient\n}\n\nexport const useAuthClient = () => getAuthClient()\n","export enum ErrorCode {\n OTP_MFA_CODE = 1635,\n APP_MFA_CODE = 1636,\n INPUT_CAPTCHACODE = 2000,\n USER_EXISTENCE = 2026,\n LOGIN_INVALID = 2021,\n PASSWORD_ERROR = 2333,\n USER_NOT_EXIST = 2004,\n}\n","import React, {\n forwardRef,\n useState,\n useImperativeHandle,\n useEffect,\n} from 'react'\nimport { Button } from 'antd'\n\ninterface SubmitButtonProps {\n text?: string\n className?: string\n onClick?: any\n}\nconst SubmitButton = (props: SubmitButtonProps, ref: any) => {\n let [spin, setSpin] = useState(false) // spin 状态需要手动设置关闭\n let [shaking, setShaking] = useState(false) // 抖动状态会自动关闭\n\n useEffect(() => {\n if (shaking === true) {\n setTimeout(() => {\n setShaking(false)\n }, 1000)\n }\n }, [shaking])\n\n useImperativeHandle(ref, () => ({\n onError: (text?: string) => {\n setShaking(true)\n },\n onSpin: (sp: boolean) => {\n setSpin(sp)\n },\n }))\n\n let propsCls = props.className ? props.className : ''\n let shakingCls = shaking ? 'shaking' : ''\n return (\n <Button\n size=\"large\"\n type=\"primary\"\n htmlType=\"submit\"\n loading={spin}\n onClick={props.onClick ? props.onClick : () => {}}\n className={`authing-g2-submit-button ${propsCls} ${shakingCls}`}\n >\n {props.text}\n </Button>\n )\n}\nexport default forwardRef(SubmitButton)\n","import React, { FC } from 'react'\nimport { GuardModuleType } from '../../Guard/module'\nimport { createBaseContext } from '../base'\n\nexport interface IModuleContext {\n module: string\n changeModule: React.Dispatch<GuardModuleType>\n setInitData: React.Dispatch<any>\n}\n\nconst [Context, useBaseContext] = createBaseContext<IModuleContext>()\n\nexport const useModule: () => IModuleContext = () => {\n const guardContext = useBaseContext()\n\n return guardContext\n}\n\nexport const ModuleContext: FC<{\n value: IModuleContext\n}> = ({ children = null, value }) => {\n return <Context.Provider value={value}>{children}</Context.Provider>\n}\n","import { Form } from 'antd'\nimport React, {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react'\nimport { fieldRequiredRule, sleep, VALIDATE_PATTERN } from '../_utils'\nimport { useGuardHttp } from '../_utils/guradHttp'\nimport { useTranslation } from 'react-i18next'\nimport {\n ICheckProps,\n ValidatorFormItemMetaProps,\n ValidatorFormItemProps,\n} from '.'\nimport { Rule } from 'antd/lib/form'\nimport { useDebounce } from '../_utils/hooks'\n\nconst checkError = (message: string) => Promise.reject(new Error(message))\n\nconst checkSuccess = (message?: string) => Promise.resolve(message ?? '')\n\nconst ValidatorFormItem = forwardRef<ICheckProps, ValidatorFormItemMetaProps>(\n (props, ref) => {\n const {\n userPoolId,\n form,\n checkRepeat = false,\n method,\n ...formItemProps\n } = props\n\n const { get } = useGuardHttp()\n const { t } = useTranslation()\n const [checked, setChecked] = useState(false)\n\n const [isReady, setIsReady] = useState(false)\n\n const methodContent = useMemo(() => {\n if (method === 'email')\n return {\n field: t('common.emailLabel'),\n checkErrorMessage: t('common.checkEmail'),\n pattern: VALIDATE_PATTERN.email,\n }\n else\n return {\n field: t('common.phone'),\n checkErrorMessage: t('common.phoneFormateError'),\n pattern: VALIDATE_PATTERN.phone,\n }\n }, [method, t])\n\n const checkField = useDebounce(async (value: string) => {\n if (!(value && methodContent.pattern.test(value))) {\n setIsReady(true)\n return\n }\n let { data } = await get<boolean>(`/api/v2/users/find`, {\n userPoolId: userPoolId,\n key: value,\n type: method,\n })\n setChecked(Boolean(data))\n form?.validateFields([method])\n setIsReady(true)\n }, 500)\n\n useImperativeHandle(ref, () => ({\n check: (values: any) => {\n setChecked(false)\n if (values[method]) {\n console.log('check', isReady)\n setIsReady(false)\n checkField(values[method])\n }\n },\n }))\n\n const checkReady = useCallback(async (): Promise<boolean> => {\n if (isReady) return true\n do {\n await sleep(200)\n } while (isReady)\n\n return true\n }, [isReady])\n\n const validator = useCallback(async () => {\n if ((await checkReady()) && checked)\n return checkError(methodContent.checkErrorMessage)\n else return checkSuccess()\n }, [checkReady, checked, methodContent.checkErrorMessage])\n\n const rules = useMemo<Rule[]>(() => {\n const rules = [\n ...fieldRequiredRule(methodContent.field),\n {\n validator: (_: any, value: any) => {\n if (!methodContent.pattern.test(value))\n return checkError(methodContent.checkErrorMessage)\n\n return checkSuccess()\n },\n },\n ]\n checkRepeat &&\n rules.push({\n validator,\n })\n\n return rules\n }, [\n checkRepeat,\n methodContent.checkErrorMessage,\n methodContent.field,\n methodContent.pattern,\n validator,\n ])\n\n return (\n <Form.Item\n validateFirst={true}\n rules={[...rules, ...(formItemProps?.rules ?? [])]}\n {...formItemProps}\n name={method}\n />\n )\n }\n)\n\nexport const EmailFormItem = forwardRef<ICheckProps, ValidatorFormItemProps>(\n (props, ref) => <ValidatorFormItem ref={ref} {...props} method=\"email\" />\n)\n\nexport const PhoneFormItem = forwardRef<ICheckProps, ValidatorFormItemProps>(\n (props, ref) => <ValidatorFormItem ref={ref} {...props} method=\"phone\" />\n)\n","import { useRef, useCallback, useEffect } from 'react'\nimport { GuardModuleType } from '../../Guard/module'\nimport { useModule } from '../../context/module/context'\n\nexport const useChangeModule = () => {\n const { module, changeModule, setInitData } = useModule()\n\n const nextModule = (nextModuleType: GuardModuleType, nextData?: any) => {\n if (nextModuleType !== module) changeModule(nextModuleType)\n\n setInitData(nextData ?? {})\n }\n\n return nextModule\n}\n\nlet thisAppId: string = ''\n\nexport const useAppId = (appId?: string) => {\n if (appId) {\n thisAppId = appId\n }\n\n return thisAppId\n}\n\nexport const useDebounce = (\n // 回调函数\n fn: any,\n // 延迟时间\n delay: number\n) => {\n const timer = useRef<{ time: any }>({ time: null })\n const errorBody = useRef<{ body: any }>({ body: null })\n\n useEffect(() => {\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n timer.current.time && clearInterval(timer.current.time)\n }\n }, [])\n\n return useCallback(\n (...args: any[]) => {\n if (timer.current.time) {\n clearTimeout(timer.current.time)\n timer.current.time = null\n }\n timer.current.time = setTimeout(() => {\n // fn.apply(this, args);\n const res = fn(...args)\n timer.current.time = null\n errorBody.current.body = res\n }, delay)\n // if (errorBody.current.body) {\n // return Promise.reject(errorBody.current.body)\n // } else {\n // return Promise.resolve()\n // }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [timer.current, delay]\n )\n}\n","import { FormItemProps } from 'antd/lib/form'\nimport FormItem from 'antd/lib/form/FormItem'\nimport React, { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { PasswordLoginMethods } from '../../../AuthingGuard/api'\nimport { EmailFormItem, PhoneFormItem } from '../../../ValidatorRules'\nimport { fieldRequiredRule } from '../../../_utils'\n\nexport interface FormItemAccountProps extends FormItemProps {\n passwordLoginMethods: PasswordLoginMethods[]\n}\n\nexport const FormItemAccount: React.FC<FormItemAccountProps> = (props) => {\n const { passwordLoginMethods: methods, ...formItemPtops } = props\n const { t } = useTranslation()\n\n const runderTemplate = useMemo(() => {\n if (methods.length !== 1)\n return (\n <FormItem\n rules={fieldRequiredRule(t('common.account'))}\n {...formItemPtops}\n />\n )\n\n switch (methods[0]) {\n case 'phone-password':\n return <PhoneFormItem {...formItemPtops} />\n case 'email-password':\n return <EmailFormItem {...formItemPtops} />\n case 'username-password':\n return (\n <FormItem\n rules={fieldRequiredRule(t('common.username'))}\n {...formItemPtops}\n />\n )\n }\n }, [formItemPtops, methods, t])\n\n return <>{runderTemplate}</>\n}\n","import Input, { InputProps } from 'antd/lib/input'\nimport React, { useState } from 'react'\n\nexport interface InputNumberProps extends InputProps {}\n\nexport const InputNumber: React.FC<InputNumberProps> = (props) => {\n const { onChange, value: propsValue, ...inputProps } = props\n const [value, setValue] = useState<InputNumberProps['value']>(\n /^[0-9]*$/.test(String(propsValue)) ? propsValue : ''\n )\n\n const valueChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setValue(e.target.value)\n onChange?.(e)\n }\n\n return (\n <Input\n {...inputProps}\n value={value}\n type=\"tel\"\n onChange={(e) => {\n let v = e.target.value\n\n if (!/^[0-9]*$/.test(v)) {\n return\n }\n\n valueChange(e)\n }}\n />\n )\n}\n","import Input, { InputProps } from 'antd/lib/input'\nimport React, { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { PasswordLoginMethods } from '../../../AuthingGuard/api'\nimport { InputNumber } from '../../../InputNumber'\n\nexport interface InputAccountProps extends InputProps {\n passwordLoginMethods: PasswordLoginMethods[]\n}\n\nexport const InputAccount: React.FC<InputAccountProps> = (props) => {\n const { passwordLoginMethods: methods, ...inputProps } = props\n\n const { t } = useTranslation()\n\n const loginMethodsText = useMemo<\n Record<\n PasswordLoginMethods,\n {\n t: string\n sort: number\n }\n >\n >(\n () => ({\n 'email-password': {\n t: t('common.email'),\n sort: 2,\n },\n 'phone-password': {\n t: t('common.phoneNumber'),\n sort: 1,\n },\n 'username-password': {\n t: t('common.username'),\n sort: 0,\n },\n }),\n [t]\n )\n\n const placeholder = useMemo(\n () =>\n t('login.inputAccount', {\n text: methods\n ?.map((item) => loginMethodsText[item])\n .sort((a, b) => a.sort - b.sort)\n .map((item) => item.t)\n .join(' / '),\n }),\n [loginMethodsText, methods, t]\n )\n\n const runderInput = useMemo(() => {\n if (methods.length === 1 && methods[0] === 'phone-password')\n return (\n <InputNumber maxLength={11} placeholder={placeholder} {...inputProps} />\n )\n\n return <Input placeholder={placeholder} {...inputProps} />\n }, [inputProps, methods, placeholder])\n\n return <>{runderInput}</>\n}\n","import React, { useState } from 'react'\nimport { getClassnames } from '../_utils'\nimport './styles.less'\n\nexport interface ImageProProps\n extends React.ImgHTMLAttributes<HTMLImageElement> {\n src: string\n className?: string\n alt?: string\n imgClassName?: string\n size?: number | string\n width?: number | string\n height?: number | string\n borderRadius?: number | string\n noSpin?: boolean\n}\n\nexport const ImagePro = (props: ImageProProps) => {\n let { borderRadius, noSpin, alt, style, ...imgProps } = props\n let [loaded, setLoaded] = useState(noSpin === true ? true : false)\n let w: number | string = 0\n let h: number | string = 0\n if (props.size) {\n // size 存在,说明是正方形,让宽高等于 size\n w = props.size\n h = props.size\n } else {\n // 如果 size 不存在,说明长方形,尝试读取宽高\n w = props.width ? props.width : 'auto'\n h = props.height ? props.height : 'auto'\n }\n\n return (\n <div\n style={{ width: w, height: h }}\n className={getClassnames([\n 'g2-base-imagepro-container',\n 'g2-base-image-background-animation',\n loaded ? 'loaded' : 'unload',\n props?.className,\n ])}\n >\n <img\n {...imgProps}\n style={{ width: w, height: h, borderRadius: borderRadius, ...style }}\n className=\"g2-base-imagepro\"\n draggable={false}\n alt={alt || 'image'}\n onLoad={() => setLoaded(true)}\n />\n </div>\n )\n}\n","import Input, { InputProps } from 'antd/lib/input'\nimport React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ImagePro } from '../../../ImagePro'\n\nexport interface GraphicVerifyCodeProps extends InputProps {\n verifyCodeUrl: string\n changeCode: () => void\n}\n\nexport const GraphicVerifyCode: React.FC<GraphicVerifyCodeProps> = (props) => {\n const { verifyCodeUrl, changeCode, ...inputProps } = props\n\n const { t } = useTranslation()\n\n return (\n <div className=\"g2-graphic-verify-code\">\n <Input {...inputProps} />\n\n <ImagePro\n className=\"g2-captcha-code-image\"\n src={verifyCodeUrl}\n alt={t('login.captchaCode')}\n height=\"46px\"\n style={{ cursor: 'pointer' }}\n onClick={() => changeCode()}\n />\n </div>\n )\n}\n","import React, { useRef, useState } from 'react'\nimport { Form, Input } from 'antd'\nimport { UserOutlined, LockOutlined } from '@ant-design/icons'\nimport { useTranslation } from 'react-i18next'\n\nimport { useGuardHttp } from '../../../_utils/guradHttp'\nimport { useAuthClient } from '../../../Guard/authClient'\nimport { fieldRequiredRule, getUserRegisterParams } from '../../../_utils'\nimport { ErrorCode } from '../../../_utils/GuardErrorCode'\nimport SubmitButton from '../../../SubmitButton'\nimport { PasswordLoginMethods } from '../../../AuthingGuard/api'\nimport { LoginMethods } from '../../..'\nimport { FormItemAccount } from './FormItemAccount'\nimport { InputAccount } from './InputAccount'\nimport { GraphicVerifyCode } from './GraphicVerifyCode'\n\ninterface LoginWithPasswordProps {\n // configs\n publicKey: string\n autoRegister?: boolean\n host?: string\n\n // events\n onLogin: any\n onBeforeLogin: any\n passwordLoginMethods: PasswordLoginMethods[]\n}\n\nexport const LoginWithPassword = (props: LoginWithPasswordProps) => {\n let { t } = useTranslation()\n let { post } = useGuardHttp()\n let client = useAuthClient()\n\n let submitButtonRef = useRef<any>(null)\n\n const [showCaptcha, setShowCaptcha] = useState(false)\n const [verifyCodeUrl, setVerifyCodeUrl] = useState('')\n const [remainCount, setRemainCount] = useState(0)\n\n const captchaUrl = `${props.host}/api/v2/security/captcha`\n const getCaptchaUrl = () => `${captchaUrl}?r=${+new Date()}`\n\n const encrypt = client.options.encryptFunction\n\n const onFinish = async (values: any) => {\n setRemainCount(0)\n // onBeforeLogin\n submitButtonRef.current.onSpin(true)\n let loginInfo = {\n type: LoginMethods.Password,\n data: {\n identity: values.account,\n password: values.password,\n captchaCode: values.captchaCode,\n },\n }\n let context = await props.onBeforeLogin(loginInfo)\n if (!context) {\n submitButtonRef.current.onSpin(false)\n return\n }\n\n // onLogin\n let url = '/api/v2/login/account'\n let account = values.account && values.account.trim()\n let password = values.password && values.password.trim()\n let captchaCode = values.captchaCode && values.captchaCode.trim()\n\n let body = {\n account: account,\n password: await encrypt!(password, props.publicKey),\n captchaCode,\n customData: getUserRegisterParams(),\n autoRegister: props.autoRegister,\n }\n const { code, message, data } = await post(url, body)\n\n if (code !== 200) {\n submitButtonRef.current.onError()\n }\n\n if (code === ErrorCode.INPUT_CAPTCHACODE) {\n setVerifyCodeUrl(getCaptchaUrl())\n setShowCaptcha(true)\n }\n if (code === ErrorCode.PASSWORD_ERROR) {\n if ((data as any)?.remainCount) {\n setRemainCount((data as any)?.remainCount ?? 0)\n }\n }\n submitButtonRef.current.onSpin(false)\n props.onLogin(code, data, message)\n }\n\n return (\n <div className=\"authing-g2-login-password\">\n <Form\n name=\"passworLogin\"\n onFinish={onFinish}\n onFinishFailed={() => submitButtonRef.current.onError()}\n autoComplete=\"off\"\n >\n <FormItemAccount\n name=\"account\"\n className=\"authing-g2-input-form\"\n passwordLoginMethods={props.passwordLoginMethods}\n >\n <InputAccount\n className=\"authing-g2-input\"\n autoComplete=\"email,username,tel\"\n size=\"large\"\n prefix={<UserOutlined style={{ color: '#878A95' }} />}\n passwordLoginMethods={props.passwordLoginMethods}\n />\n </FormItemAccount>\n <Form.Item\n name=\"password\"\n className=\"authing-g2-input-form\"\n rules={fieldRequiredRule(t('common.password'))}\n >\n <Input.Password\n className=\"authing-g2-input\"\n size=\"large\"\n placeholder={t('login.inputLoginPwd')}\n prefix={<LockOutlined style={{ color: '#878A95' }} />}\n />\n </Form.Item>\n {/* 图形验证码 */}\n {showCaptcha && (\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"captchaCode\"\n rules={fieldRequiredRule(t('common.captchaCode'))}\n >\n <GraphicVerifyCode\n className=\"authing-g2-input\"\n size=\"large\"\n placeholder={t('login.inputCaptchaCode')}\n verifyCodeUrl={verifyCodeUrl}\n changeCode={() => setVerifyCodeUrl(getCaptchaUrl())}\n />\n </Form.Item>\n )}\n {remainCount !== 0 && (\n <span\n style={{\n marginBottom: 23,\n fontSize: 12,\n color: '#E63333',\n display: 'block',\n }}\n >\n {t('common.loginFailCheck', {\n number: remainCount,\n })}\n </span>\n )}\n\n <Form.Item>\n <SubmitButton\n text={\n props.autoRegister\n ? `${t('common.login')} / ${t('common.register')}`\n : t('common.login')\n }\n className=\"password\"\n ref={submitButtonRef}\n />\n </Form.Item>\n </Form>\n </div>\n )\n}\n","import { Button } from 'antd'\nimport React, { FC, useState, useRef, useEffect, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport './style.less'\nimport { ButtonProps } from 'antd/lib/button'\n\nconst TIME = 60\nexport interface SendCodeProps extends ButtonProps {\n beforeSend: () => Promise<boolean>\n btnRef?: React.RefObject<HTMLButtonElement>\n}\n\nconst useSentCounter = () => {\n const [countDown, setCountDown] = useState(0)\n const timerRef = useRef<any>(0)\n\n useEffect(() => {\n return () => clearInterval(timerRef.current)\n }, [])\n\n useEffect(() => {\n if (countDown <= 0) {\n clearInterval(timerRef.current)\n }\n }, [countDown])\n\n const enabled = useMemo(() => countDown <= 0, [countDown])\n\n const send = () => {\n setCountDown(TIME)\n\n timerRef.current = setInterval(() => {\n setCountDown((prev) => {\n return prev - 1\n })\n }, 1000)\n }\n\n return {\n enabled,\n send,\n countDown,\n }\n}\n\nexport const SendCodeBtn: FC<SendCodeProps> = ({\n beforeSend,\n btnRef,\n ...buttonProps\n}) => {\n const { enabled, send, countDown } = useSentCounter()\n const [loading, setLoading] = useState(false)\n const { t } = useTranslation()\n const disabled = useMemo(() => {\n return !enabled || loading\n }, [enabled, loading])\n\n const onClick = async (e: React.MouseEvent<HTMLButtonElement>) => {\n setLoading(true)\n if (disabled) {\n return\n }\n\n let beforeStop = !(await beforeSend())\n if (beforeStop) {\n setLoading(false)\n return\n }\n setLoading(false)\n send()\n }\n\n return (\n <Button\n {...buttonProps}\n className={\n buttonProps.type ?? 'authing-g2-send-code-btn g2-loading-btn-center'\n }\n disabled={disabled}\n loading={loading}\n onClick={onClick}\n ref={btnRef}\n >\n {loading === true && <span></span>}\n {loading === false && (\n <span>\n {enabled\n ? t('common.sendVerifyCode')\n : t('common.retryAfterTime', {\n time: countDown,\n })}\n </span>\n )}\n </Button>\n )\n}\n","import { Col, message, Row } from 'antd'\nimport React, { FC } from 'react'\nimport { EmailScene } from 'authing-js-sdk'\n\nimport { SendCodeBtn } from './SendCodeBtn'\n\nimport './style.less'\nimport { useTranslation } from 'react-i18next'\nimport { useAuthClient } from '../Guard/authClient'\nimport { validate } from '../_utils'\nimport { InputProps } from 'antd/lib/input'\nimport { InputNumber } from '../InputNumber'\n\nexport interface SendPhoneCodeProps extends InputProps {\n method: 'phone' | 'email'\n data: string\n form?: any\n onSendCodeBefore?: any // 点击的时候先做这个\n}\n\nexport const SendCode: FC<SendPhoneCodeProps> = ({\n method,\n data,\n value,\n onChange,\n form,\n onSendCodeBefore,\n maxLength,\n ...inputProps\n}) => {\n const { t } = useTranslation()\n\n const authClient = useAuthClient()\n\n const sendEmail = async (email: string) => {\n if (!email) {\n message.error(t('login.inputEmail'))\n return false\n }\n if (!validate('email', email)) {\n message.error(t('common.emailFormatError'))\n return false\n }\n try {\n await authClient.sendEmail(email, EmailScene.ResetPassword)\n // onSend?.()\n return true\n } catch (error) {\n // onError?.(error)\n return false\n }\n }\n\n const sendPhone = async (phone: string) => {\n try {\n await authClient.sendSmsCode(phone)\n return true\n } catch (error) {\n return false\n }\n }\n\n return (\n <>\n <Row justify=\"space-between\" align=\"middle\">\n <Col span={15} className=\"g2-send-code-input-col\">\n <InputNumber\n value={value}\n onChange={onChange}\n {...inputProps}\n maxLength={maxLength}\n />\n </Col>\n <Col offset={1} span={8}>\n <SendCodeBtn\n beforeSend={() => {\n return onSendCodeBefore()\n .then(async (b: any) => {\n let phoneData = form ? form.getFieldValue(method) : data\n return method === 'phone'\n ? await sendPhone(phoneData)\n : await sendEmail(phoneData)\n })\n .catch((e: any) => {\n // console.log('e', e)\n return false\n })\n }}\n />\n </Col>\n </Row>\n </>\n )\n}\n","import React, { useRef } from 'react'\nimport { Form } from 'antd'\nimport { useTranslation } from 'react-i18next'\nimport { useAuthClient } from '../../Guard/authClient'\nimport { UserOutlined, SafetyOutlined } from '@ant-design/icons'\nimport { LoginMethods } from '../../'\nimport { SendCode } from '../../SendCode'\nimport { fieldRequiredRule } from '../../_utils'\nimport SubmitButton from '../../SubmitButton'\nimport { InputNumber } from '../../InputNumber'\nimport { PhoneFormItem } from '../../ValidatorRules'\n\n// const formatPhone = (value: any) => {\n// if (!value) {\n// return ''\n// }\n// let a = value.slice(0, 3)\n// let b = value.slice(3, 7)\n// let c = value.slice(7, 11)\n// if (value.length < 4) {\n// return a\n// } else if (value.length < 8) {\n// return `${a}-${b}`\n// } else {\n// return `${a}-${b}-${c}`\n// }\n// }\nexport const LoginWithPhoneCode = (props: any) => {\n let [form] = Form.useForm()\n let submitButtonRef = useRef<any>(null)\n const { t } = useTranslation()\n\n let client = useAuthClient()\n\n const verifyCodeLength = props.verifyCodeLength ?? 4\n\n const onFinish = async (values: any) => {\n submitButtonRef.current.onSpin(true)\n // onBeforeLogin\n let loginInfo = {\n type: LoginMethods.Password,\n data: {\n phone: values.phone,\n code: values.code,\n },\n }\n let context = await props.onBeforeLogin(loginInfo)\n if (!context) {\n submitButtonRef.current.onSpin(false)\n return\n }\n\n let loginContext = client.loginByPhoneCode(values.phone, values.code)\n loginContext\n .then((u) => {\n submitButtonRef.current.onSpin(false)\n props.onLogin(200, u)\n })\n .catch((e) => {\n submitButtonRef.current.onSpin(false)\n props.onLogin(e.code, e.data, e.message)\n })\n }\n\n return (\n <div className=\"authing-g2-login-phone-code\">\n <Form\n name=\"phoneCode\"\n form={form}\n onFinish={onFinish}\n onFinishFailed={() => submitButtonRef.current.onError()}\n autoComplete=\"off\"\n >\n <PhoneFormItem className=\"authing-g2-input-form\" name=\"phone\">\n <InputNumber\n className=\"authing-g2-input\"\n autoComplete=\"tel\"\n type=\"tel\"\n size=\"large\"\n // 只有 InputNumber formatter、controls API\n maxLength={11}\n // formatter={formatPhone}\n // parser={(value) => (value ? value.replaceAll('-', '') : '')}\n placeholder={t('login.inputPhone')}\n prefix={<UserOutlined style={{ color: '#878A95' }} />}\n />\n </PhoneFormItem>\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"code\"\n rules={fieldRequiredRule(t('common.captchaCode'))}\n >\n <SendCode\n className=\"authing-g2-input\"\n autoComplete=\"one-time-code\"\n size=\"large\"\n placeholder={t('common.inputFourVerifyCode', {\n length: verifyCodeLength,\n })}\n maxLength={verifyCodeLength}\n prefix={<SafetyOutlined style={{ color: '#878A95' }} />}\n method=\"phone\"\n data={''}\n form={form}\n onSendCodeBefore={() => form.validateFields(['phone'])}\n />\n </Form.Item>\n <Form.Item>\n <SubmitButton\n text={\n props.autoRegister\n ? `${t('common.login')} / ${t('common.register')}`\n : t('common.login')\n }\n className=\"password\"\n ref={submitButtonRef}\n />\n </Form.Item>\n </Form>\n </div>\n )\n}\n","import React, { useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { LockOutlined, UserOutlined } from '@ant-design/icons'\nimport { Form, Input } from 'antd'\nimport { LoginMethods } from '../../'\nimport { ErrorCode } from '../../_utils/GuardErrorCode'\nimport { useAuthClient } from '../../Guard/authClient'\nimport SubmitButton from '../../SubmitButton'\nimport { fieldRequiredRule } from '../../_utils'\n\ninterface LoginWithLDAPProps {\n // configs\n publicKey: string\n autoRegister?: boolean\n host?: string\n\n // events\n onLogin: any\n onBeforeLogin: any\n}\n\nexport const LoginWithLDAP = (props: LoginWithLDAPProps) => {\n let client = useAuthClient()\n const { t } = useTranslation()\n let submitButtonRef = useRef<any>(null)\n\n const [showCaptcha, setShowCaptcha] = useState(false)\n const [verifyCodeUrl, setVerifyCodeUrl] = useState('')\n const captchaUrl = `${props.host}/api/v2/security/captcha`\n const getCaptchaUrl = () => `${captchaUrl}?r=${+new Date()}`\n\n const onFinish = async (values: any) => {\n // onBeforeLogin\n submitButtonRef.current.onSpin(true)\n let loginInfo = {\n type: LoginMethods.LDAP,\n data: {\n identity: values.account,\n password: values.password,\n captchaCode: values.captchaCode,\n },\n }\n let context = await props.onBeforeLogin(loginInfo)\n if (!context) {\n submitButtonRef.current.onSpin(false)\n return\n }\n\n // onLogin\n let account = values.account && values.account.trim()\n let password = values.password && values.password.trim()\n let captchaCode = values.captchaCode && values.captchaCode.trim()\n try {\n const user = await client.loginByLdap(account, password, {\n autoRegister: props.autoRegister,\n captchaCode,\n })\n props.onLogin(200, user)\n } catch (error: any) {\n if (typeof error?.message === 'string') {\n let e = { code: 2333, data: {}, message: t('common.timeoutLDAP') }\n try {\n e = JSON.parse(error?.message)\n console.log('paser error.message error,cheke error', error)\n // onFail && onFail(errorData)\n submitButtonRef.current.onSpin(false)\n return\n } catch {}\n if (e.code === ErrorCode.INPUT_CAPTCHACODE) {\n setVerifyCodeUrl(getCaptchaUrl())\n setShowCaptcha(true)\n }\n submitButtonRef.current.onSpin(false)\n props.onLogin(e.code, e.data, e.message)\n // onFail && onFail(error)\n }\n }\n }\n\n return (\n <div className=\"authing-g2-login-ldap\">\n <Form\n name=\"passworLogin\"\n onFinish={onFinish}\n onFinishFailed={() => submitButtonRef.current.onError()}\n autoComplete=\"off\"\n >\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"account\"\n rules={fieldRequiredRule(t('common.account'))}\n >\n <Input\n className=\"authing-g2-input\"\n autoComplete=\"email,username,tel\"\n size=\"large\"\n placeholder={t('login.inputLdapUsername')}\n prefix={<UserOutlined style={{ color: '#878A95' }} />}\n />\n </Form.Item>\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"password\"\n rules={fieldRequiredRule(t('common.password'))}\n >\n <Input.Password\n className=\"authing-g2-input\"\n size=\"large\"\n placeholder={t('login.inputLdapPwd')}\n prefix={<LockOutlined style={{ color: '#878A95' }} />}\n />\n </Form.Item>\n {showCaptcha && (\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"captchaCode\"\n rules={[{ required: true, message: t('login.inputCaptchaCode') }]}\n >\n <Input\n className=\"authing-g2-input add-after\"\n size=\"large\"\n placeholder={t('login.inputCaptchaCode')}\n addonAfter={\n <img\n className=\"g2-captcha-code-image\"\n src={verifyCodeUrl}\n alt={t('login.captchaCode')}\n style={{ height: '2em', cursor: 'pointer' }}\n onClick={() => setVerifyCodeUrl(getCaptchaUrl())}\n />\n }\n />\n </Form.Item>\n )}\n\n <Form.Item>\n <SubmitButton\n text={t('common.login')}\n className=\"password\"\n ref={submitButtonRef}\n />\n </Form.Item>\n </Form>\n </div>\n )\n}\n","import React from 'react'\n\ninterface LoginWithADProps {\n onLogin: any\n}\n\nexport const LoginWithAD = (props: LoginWithADProps) => {\n return <div className=\"authing-g2-login-ad\">AD</div>\n}\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"style\", null, \"\\n #path-f {\\n fill: none;\\n stroke: #eaebee;\\n stroke-width: 10;\\n stroke-dasharray: 100 220;\\n animation: dash 40s infinite linear forwards;\\n }\\n #path-b {\\n fill: none;\\n stroke: #0080ff;\\n stroke-width: 8;\\n stroke-linecap: round;\\n stroke-linejoin: round;\\n }\\n @keyframes dash {\\n to {\\n stroke-dashoffset: 12000;\\n }\\n }\\n \");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n id: \"\\\\u5355\\\\u72EC\",\n transform: \"translate(25.000000, 16.000000)\",\n fillRule: \"nonzero\",\n strokeWidth: 2\n}, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50,0 L0,30 C0,31 0,32 0,33 C0,69 20,100 50,116 C79,100 100,69 100,33 C100,32 99,31 99,30 L50,0 Z\",\n id: \"path-b\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M50,0 L0,30 C0,31 0,32 0,33 C0,69 20,100 50,116 C79,100 100,69 100,33 C100,32 99,31 99,30 L50,0 Z\",\n id: \"path-f\"\n}));\n\nfunction SvgLoading(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, [\"title\", \"titleId\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"100%\",\n height: \"100%\",\n viewBox: \"0 0 150 150\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), _ref2, title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"Loading\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref3);\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLoading);\nexport default __webpack_public_path__ + \"static/media/loading.4a67a5f3.svg\";\nexport { ForwardRef as ReactComponent };","export enum GuardModuleType {\n ERROR = 'error',\n LOGIN = 'login',\n REGISTER = 'register',\n MFA = 'mfa',\n FORGET_PWD = 'forgetPassword',\n CHANGE_PWD = 'changePassword',\n DOWNLOAD_AT = 'downloadAT',\n BIND_TOTP = 'bindTotp',\n ANY_QUESTIONS = 'anyQuestions',\n COMPLETE_INFO = 'completeInfo',\n RECOVERY_CODE = 'recoveryCode',\n SUBMIT_SUCCESS = 'submitSuccess',\n}\nexport interface GuardModuleAction {\n action: string\n module?: GuardModuleType\n message?: string\n initData?: any\n}\n","import React from 'react'\nimport { ReactComponent as LoadShielding } from './loading.svg'\n\ninterface IG2SpinProps {\n size?: number\n}\n\nexport const ShieldSpin = (props: IG2SpinProps) => {\n let size = props.size ? props.size : 50\n\n return (\n <div\n style={{\n width: size,\n height: size,\n }}\n >\n <LoadShielding />\n </div>\n )\n}\n\nexport const Spin = () => (\n <div className=\"g2-init-setting-loading\">\n <ShieldSpin size={100} />\n </div>\n)\n","import React, { useEffect, useRef, useState } from 'react'\nimport { ShieldSpin } from '../../ShieldSpin'\nimport { useAuthClient } from '../../Guard/authClient'\n\ninterface LoginWithAppQrcodeProps {\n onLogin: any\n canLoop: boolean\n qrCodeScanOptions: any\n}\n\nexport const LoginWithAppQrcode = (props: LoginWithAppQrcodeProps) => {\n const timerRef = useRef<any>()\n const client = useAuthClient()\n const [loading, setLoading] = useState(true)\n const appQrcodeClient = client.qrcode\n\n useEffect(() => {\n if (!props.canLoop) {\n return\n }\n\n appQrcodeClient.startScanning('authingGuardAppQrcode', {\n autoExchangeUserInfo: true,\n ...props.qrCodeScanOptions,\n onCodeLoaded() {\n setLoading(false)\n },\n onStart(timer) {\n timerRef.current = timer\n },\n onSuccess(user) {\n props.onLogin(200, user)\n },\n onError: (message) => {\n // config.qrCodeScanOptions?.onError?.(message)\n // onFail && onFail(`${message}`)\n },\n })\n return () => clearInterval(timerRef.current)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [appQrcodeClient, props.canLoop, props.qrCodeScanOptions])\n\n return (\n <div className=\"authing-g2-login-app-qrcode\">\n {loading && <ShieldSpin />}\n <div id=\"authingGuardAppQrcode\"></div>\n </div>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { message } from 'antd'\nimport { ShieldSpin } from '../../ShieldSpin'\nimport { useAuthClient } from '../../Guard/authClient'\n\ninterface LoginWithWechatMiniQrcodeProps {\n onLogin: any\n canLoop: boolean\n qrCodeScanOptions: any\n}\n\nexport const LoginWithWechatMiniQrcode = (\n props: LoginWithWechatMiniQrcodeProps\n) => {\n const timerRef = useRef<any>()\n const client = useAuthClient()\n const [loading, setLoading] = useState(true)\n const appQrcodeClient = client.wxqrcode\n\n useEffect(() => {\n return () => {\n clearInterval(timerRef.current)\n }\n }, [])\n\n useEffect(() => {\n if (!props.canLoop) {\n return\n }\n appQrcodeClient.startScanning('authingGuardMiniQrcode', {\n autoExchangeUserInfo: true,\n ...props.qrCodeScanOptions,\n onCodeLoaded() {\n setLoading(false)\n },\n onStart(timer) {\n // console.log('开始扫码')\n timerRef.current = timer\n },\n onSuccess(user) {\n // console.log('扫码完成', user)\n // onSuccess && onSuccess(user as User)\n props.onLogin(200, user)\n },\n onError: (ms) => {\n // config.qrCodeScanOptions?.onError?.(message)\n // onFail && onFail(`${message}`)\n message.error(ms)\n },\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [appQrcodeClient, props.canLoop, props.qrCodeScanOptions])\n\n return (\n <div className=\"authing-g2-login-app-qrcode\">\n {loading && <ShieldSpin />}\n <div id=\"authingGuardMiniQrcode\"></div>\n </div>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { ShieldSpin } from '../../ShieldSpin'\nimport { useAuthClient } from '../../Guard/authClient'\n\ninterface LoginWithWechatmpQrcodeProps {\n onLogin: any\n canLoop: boolean\n qrCodeScanOptions: any\n}\n\nexport const LoginWithWechatmpQrcode = (\n props: LoginWithWechatmpQrcodeProps\n) => {\n const timerRef = useRef<any>()\n const client = useAuthClient()\n const [loading, setLoading] = useState(true)\n\n const appQrcodeClient = client.wechatmpqrcode\n // const config = props.config\n\n useEffect(() => {\n if (!props.canLoop) {\n return\n }\n appQrcodeClient.startScanning('authingGuardMpQrcode', {\n autoExchangeUserInfo: true,\n ...props.qrCodeScanOptions,\n onCodeLoaded() {\n setLoading(false)\n },\n onStart(timer) {\n timerRef.current = timer\n },\n onSuccess(user) {\n props.onLogin(200, user)\n // onSuccess && onSuccess(user as User)\n },\n onError: (message) => {\n // config.qrCodeScanOptions?.onError?.(message)\n // onFail && onFail(`${message}`)\n },\n })\n return () => clearInterval(timerRef.current)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [appQrcodeClient, props.canLoop, props.qrCodeScanOptions])\n\n return (\n <div className=\"authing-g2-login-app-qrcode\">\n {loading && <ShieldSpin />}\n <div id=\"authingGuardMpQrcode\"></div>\n </div>\n )\n}\n","import { ErrorCode } from '../_utils/GuardErrorCode'\nimport { GuardModuleAction, GuardModuleType } from '../Guard/module'\n\nexport const codeMap: Record<number, GuardModuleAction> = {\n [ErrorCode.APP_MFA_CODE]: {\n // 跳转去 mfa 验证\n action: 'changeModule',\n module: GuardModuleType.MFA,\n },\n [ErrorCode.INPUT_CAPTCHACODE]: {\n // 需要输入图形验证码\n action: 'message',\n },\n\n 1639: {\n // 首次登陆,跳转去修改密码\n action: 'changeModule',\n module: GuardModuleType.CHANGE_PWD,\n initData: { type: 'inital' },\n // 借助 1639 强行 mock 一下\n // initData: { type: 'rotate' },\n },\n\n 2058: {\n // 密码轮换,跳转去修改密码\n action: 'changeModule',\n module: GuardModuleType.CHANGE_PWD,\n initData: { type: 'rotate' },\n },\n\n 2333: {\n // 密码错误\n action: 'message',\n },\n 2057: {\n // 密码错误太多次\n action: 'message',\n },\n 2042: {\n // 禁止未验证邮箱注册\n action: 'message',\n },\n 2001: {\n // 验证码过期\n action: 'message',\n },\n}\n","import { useState, useEffect } from 'react'\n// import { inRange, debounce } from 'lodash'\n\nfunction debounce(fn: Function, delay: number, immediate = true) {\n let timer: any\n\n return function (this: any) {\n let context = this\n let args = arguments\n timer && clearTimeout(timer)\n\n if (immediate && !timer) {\n fn.apply(context, args)\n }\n\n timer = setTimeout(function () {\n fn.apply(context, args)\n }, delay)\n }\n}\n\nfunction inRange(n: number, start: number, end?: number): boolean {\n if (end || end === 0) {\n return n >= start && n <= end\n }\n return n >= start\n}\n\nexport enum ScreenSize {\n Mobile = 'mobile',\n Desktop = 'desktop',\n}\nexport const SCREEN_SIZE_RANG: {\n size: ScreenSize\n range: [number, number]\n}[] = [\n {\n size: ScreenSize.Mobile,\n range: [0, 719],\n },\n {\n size: ScreenSize.Desktop,\n range: [720, Infinity],\n },\n]\n\nexport const getScreenSize = () => {\n const viewportWidth = document.body.clientWidth\n return (\n SCREEN_SIZE_RANG.find((item) => inRange(viewportWidth, ...item.range))\n ?.size ?? ScreenSize.Desktop\n )\n}\n\nexport const useScreenSize = () => {\n const [screenSize, setScreenSize] = useState(getScreenSize)\n\n useEffect(() => {\n const onResize = debounce(() => {\n setScreenSize(getScreenSize())\n }, 200)\n window.addEventListener('resize', onResize)\n\n return () => window.removeEventListener('resize', onResize)\n }, [])\n\n return [screenSize]\n}\n","/** eslint-disable */\n/**\n * !!!!!!!!!!!! 注意注意!!!!!!!!!!!!!\n *\n * 只要替换 svgStr 中的字符串即可,为了兼容 SSR!!!!!!\n *\n */\nimport { svgStr } from './svg'\nvar init = function (a) {\n var c,\n t,\n l,\n e,\n i,\n o,\n h = svgStr,\n m = (m = document.getElementsByTagName('script'))[\n m.length - 1\n ].getAttribute('data-injectcss')\n if (m && !a.__iconfont__svg__cssinject__) {\n a.__iconfont__svg__cssinject__ = !0\n try {\n document.write(\n '<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>'\n )\n } catch (a) {\n console && console.log(a)\n }\n }\n function n() {\n i || ((i = !0), l())\n }\n ;(c = function () {\n var a, c, t\n ;((t = document.createElement('div')).innerHTML = h),\n (h = null),\n (c = t.getElementsByTagName('svg')[0]) &&\n (c.setAttribute('aria-hidden', 'true'),\n (c.style.position = 'absolute'),\n (c.style.width = 0),\n (c.style.height = 0),\n (c.style.overflow = 'hidden'),\n (a = c),\n (t = document.body).firstChild\n ? (c = t.firstChild).parentNode.insertBefore(a, c)\n : t.appendChild(a))\n }),\n document.addEventListener\n ? ~['complete', 'loaded', 'interactive'].indexOf(document.readyState)\n ? setTimeout(c, 0)\n : ((t = function () {\n document.removeEventListener('DOMContentLoaded', t, !1), c()\n }),\n document.addEventListener('DOMContentLoaded', t, !1))\n : document.attachEvent &&\n ((l = c),\n (e = a.document),\n (i = !1),\n (o = function () {\n try {\n e.documentElement.doScroll('left')\n } catch (a) {\n return void setTimeout(o, 50)\n }\n n()\n })(),\n (e.onreadystatechange = function () {\n 'complete' == e.readyState && ((e.onreadystatechange = null), n())\n }))\n}\n\nif (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n init(window)\n}\n","export const svgStr =\n '<svg><symbol id=\"authing-close-line\" viewBox=\"0 0 1024 1024\"><path d=\"M512 451.669333l211.2-211.2 60.330667 60.330667-211.2 211.2 211.2 211.2-60.330667 60.330667-211.2-211.2-211.2 211.2-60.330667-60.330667 211.2-211.2-211.2-211.2L300.8 240.469333z\" ></path></symbol><symbol id=\"authing-global-line\" viewBox=\"0 0 1024 1024\"><path d=\"M512 938.666667C276.352 938.666667 85.333333 747.648 85.333333 512S276.352 85.333333 512 85.333333s426.666667 191.018667 426.666667 426.666667-191.018667 426.666667-426.666667 426.666667z m-97.706667-99.541334A763.733333 763.733333 0 0 1 342.485333 554.666667H173.312a341.674667 341.674667 0 0 0 240.981333 284.458666zM427.946667 554.666667c6.442667 104.064 36.181333 201.813333 84.053333 288.085333A678.613333 678.613333 0 0 0 596.053333 554.666667h-168.106666z m422.741333 0h-169.173333a763.733333 763.733333 0 0 1-71.808 284.458666A341.674667 341.674667 0 0 0 850.688 554.666667zM173.312 469.333333h169.173333A763.733333 763.733333 0 0 1 414.293333 184.874667 341.674667 341.674667 0 0 0 173.312 469.333333z m254.677333 0h168.021334A678.613333 678.613333 0 0 0 512 181.248 678.613333 678.613333 0 0 0 427.946667 469.333333z m181.717334-284.458666A763.733333 763.733333 0 0 1 681.514667 469.333333h169.173333a341.674667 341.674667 0 0 0-240.981333-284.458666z\" ></path></symbol><symbol id=\"authing-english-input\" viewBox=\"0 0 1024 1024\"><path d=\"M597.333333 426.666667h85.333334v32.298666a192 192 0 0 1 298.666666 159.701334V853.333333h-85.333333v-234.666666c0-61.013333-50.133333-106.666667-106.666667-106.666667S682.666667 557.653333 682.666667 618.666667V853.333333h-85.333334V426.666667z m-85.333333-256v85.333333H170.666667v213.333333h341.333333v85.333334H170.666667v213.333333h341.333333v85.333333H85.333333V170.666667h426.666667z\" ></path></symbol><symbol id=\"authing-zhongwen\" viewBox=\"0 0 1024 1024\"><path d=\"M467.2 550.4v-76.8h-88.96v76.8h88.96z m89.6 0h90.24v-76.8H556.8v76.8zM467.2 384V256h89.6v128h179.84v256H556.8v128h-89.6V640H288.64V384H467.2zM512 870.4a358.4 358.4 0 1 0 0-716.8 358.4 358.4 0 0 0 0 716.8z m0 89.6a448 448 0 1 1 0-896 448 448 0 0 1 0 896z\" ></path></symbol><symbol id=\"authing-a-eye-line1\" viewBox=\"0 0 1024 1024\"><path d=\"M512 128a469.504 469.504 0 0 1 461.632 384A469.504 469.504 0 0 1 50.368 512 469.504 469.504 0 0 1 512 128z m0 682.688A384.256 384.256 0 0 0 886.464 512 384.192 384.192 0 0 0 137.6 512 384.192 384.192 0 0 0 512 810.688zM512 704a192 192 0 1 1 0-384 192 192 0 0 1 0 384z m0-85.312a106.688 106.688 0 1 0 0-213.376 106.688 106.688 0 0 0 0 213.376z\" ></path></symbol><symbol id=\"authing-a-eye-close-line1\" viewBox=\"0 0 1024 1024\"><path d=\"M398.592 801.344l-82.368-22.08 33.536-125.44A468.8 468.8 0 0 1 211.648 574.08l-91.84 91.904-60.352-60.416 91.904-91.84a467.52 467.52 0 0 1-101.184-216.32l83.968-15.36a384.128 384.128 0 0 0 755.712 0l83.968 15.36a467.52 467.52 0 0 1-101.12 216.32L964.48 605.44l-60.352 60.416-91.84-91.904a468.736 468.736 0 0 1-138.112 79.872l33.536 125.44-82.368 22.016-33.6-125.44a472.32 472.32 0 0 1-159.616 0l-33.6 125.44z\" ></path></symbol><symbol id=\"authing-a-user-line1\" viewBox=\"0 0 1024 1024\"><path d=\"M170.688 938.688a341.312 341.312 0 0 1 682.624 0H768a256 256 0 0 0-512 0H170.688z m341.312-384c-141.44 0-256-114.56-256-256s114.56-256 256-256 256 114.56 256 256-114.56 256-256 256z m0-85.376A170.624 170.624 0 1 0 512 128a170.624 170.624 0 1 0 0 341.312z\" ></path></symbol><symbol id=\"authing-a-smartphone-line1\" viewBox=\"0 0 1024 1024\"><path d=\"M298.688 170.688v682.624h426.624V170.688H298.688zM256 85.312h512a42.624 42.624 0 0 1 42.688 42.688v768a42.624 42.624 0 0 1-42.688 42.688H256A42.688 42.688 0 0 1 213.312 896V128A42.688 42.688 0 0 1 256 85.312z m256 640a42.688 42.688 0 1 1 0 85.376 42.688 42.688 0 0 1 0-85.376z\" ></path></symbol><symbol id=\"authing-a-mail-line3\" viewBox=\"0 0 1024 1024\"><path d=\"M128 128h768a42.688 42.688 0 0 1 42.688 42.688v682.624A42.688 42.688 0 0 1 896 896H128a42.624 42.624 0 0 1-42.688-42.688V170.688A42.688 42.688 0 0 1 128 128z m725.312 180.8L515.072 611.84 170.688 307.84v502.784h682.624V308.8zM192.448 213.312l322.176 284.288L832 213.312H192.448z\" ></path></symbol><symbol id=\"authing-a-lock-line1\" viewBox=\"0 0 1024 1024\"><path d=\"M810.688 426.688h42.624a42.688 42.688 0 0 1 42.688 42.624V896a42.624 42.624 0 0 1-42.688 42.688H170.688A42.688 42.688 0 0 1 128 896V469.312a42.688 42.688 0 0 1 42.688-42.624h42.624V384a298.688 298.688 0 0 1 597.376 0v42.688zM213.312 512v341.312h597.376V512H213.312z m256 85.312h85.376V768H469.312V597.312z m256-170.624V384a213.312 213.312 0 0 0-426.624 0v42.688h426.624z\" ></path></symbol><symbol id=\"authing-a-question-line1\" viewBox=\"0 0 1024 1024\"><path d=\"M512 938.688A426.688 426.688 0 1 1 512 85.312a426.688 426.688 0 0 1 0 853.376z m0-85.376A341.376 341.376 0 1 0 512 170.624a341.376 341.376 0 0 0 0 682.688zM469.312 640h85.376v85.312H469.312V640z m85.376-70.208v27.52H469.312v-64A42.688 42.688 0 0 1 512 490.688a64 64 0 1 0-62.72-76.544L365.44 397.376a149.376 149.376 0 1 1 189.184 172.416z\" ></path></symbol><symbol id=\"authing-a-shield-check-line1\" viewBox=\"0 0 1024 1024\"><path d=\"M512 42.688l350.592 77.888a42.688 42.688 0 0 1 33.408 41.6v426.176a256 256 0 0 1-113.984 212.992L512 981.312l-270.016-179.968A255.872 255.872 0 0 1 128 588.352V162.24c0-20.032 13.888-37.312 33.408-41.664L512 42.688z m0 87.424L213.312 196.416v391.936c0 57.024 28.544 110.336 76.032 141.952L512 878.784l222.72-148.48a170.56 170.56 0 0 0 75.968-141.952V196.48L512 130.112z m189.952 220.672l60.352 60.352-271.488 271.552L309.76 501.632l60.352-60.352 120.64 120.704 211.2-211.2z\" ></path></symbol><symbol id=\"authing-phone\" viewBox=\"0 0 1024 1024\"><path d=\"M256 85.312h512a42.624 42.624 0 0 1 42.688 42.688v768a42.624 42.624 0 0 1-42.688 42.688H256A42.688 42.688 0 0 1 213.312 896V128A42.688 42.688 0 0 1 256 85.312z m256 640a42.688 42.688 0 1 0 0 85.376 42.688 42.688 0 0 0 0-85.376z\" fill=\"#545968\" ></path></symbol><symbol id=\"authing-mail\" viewBox=\"0 0 1024 1024\"><path d=\"M128 128h768a42.624 42.624 0 0 1 42.688 42.688v682.624A42.624 42.624 0 0 1 896 896H128a42.624 42.624 0 0 1-42.688-42.688V170.688A42.688 42.688 0 0 1 128 128z m386.56 370.496l-273.6-232.32-55.232 65.024 329.408 279.68 323.456-279.936-55.808-64.512-268.16 232.064H514.56z\" fill=\"#545968\" ></path></symbol><symbol id=\"authing-face\" viewBox=\"0 0 1024 1024\"><path d=\"M170.688 853.376v-170.688H85.312v256h256v-85.312H170.688z m768 85.312v-256h-85.376v170.688h-170.624v85.312h256z m-597.376-768V85.376h-256v256h85.376V170.56h170.624z m597.376 170.688v-256h-256v85.312h170.624v170.688h85.376zM256 512a256 256 0 1 0 512 0 256 256 0 0 0-512 0z m165.504 116.096A128 128 0 0 1 384 537.6h51.2a76.8 76.8 0 0 0 153.6 0h51.2a128 128 0 0 1-218.496 90.496z m15.232-152.96a38.4 38.4 0 1 1-54.272-54.272 38.4 38.4 0 0 1 54.272 54.272z m204.8 0a38.4 38.4 0 1 1-54.272-54.272 38.4 38.4 0 0 1 54.272 54.272z\" fill=\"#545968\" ></path></symbol><symbol id=\"authing-totp\" viewBox=\"0 0 1024 1024\"><path d=\"M512 42.688l350.592 77.888a42.688 42.688 0 0 1 33.408 41.6v426.176a256 256 0 0 1-113.984 212.992L512 981.312l-270.016-179.968A256 256 0 0 1 128 588.352V162.24a42.688 42.688 0 0 1 33.408-41.6L512 42.624z m0 256a85.312 85.312 0 0 0-42.688 159.232V640h85.376V457.92A85.312 85.312 0 0 0 512 298.688z\" fill=\"#545968\" ></path></symbol><symbol id=\"authing-back\" viewBox=\"0 0 1024 1024\"><path d=\"M426.276571 512l362.057143 362.057143-103.424 103.424L219.428571 512 684.909714 46.518857 788.333714 149.942857 426.276571 512z\" fill=\"#878A95\" ></path></symbol><symbol id=\"authing-weixinxiaochengxu\" viewBox=\"0 0 1024 1024\"><path d=\"M90.125 512a421.875 421.875 0 1 0 843.75 0A421.875 421.875 0 0 0 90.125 512z\" fill=\"#71CE36\" ></path><path d=\"M608.08203125 285.34765625A128.98828125 128.98828125 0 0 0 478.77734375 414.65234375v195.85546875c0 35.91210938-29.53125 65.390625-65.33789063 65.390625a66.97265625 66.97265625 0 0 1-66.60351562-66.65625c0-37.125 29.53125-65.28515625 65.390625-65.28515625A31.74609375 31.74609375 0 0 0 444.13085937 512a31.74609375 31.74609375 0 0 0-32.00976562-32.00976563 128.671875 128.671875 0 0 0-124.18945313 124.24218751 129.09375 129.09375 0 0 0 124.18945313 134.47265624 128.98828125 128.98828125 0 0 0 129.41015625-129.46289062V413.43945312a65.54882813 65.54882813 0 0 1 65.28515625-65.28515624 65.54882813 65.54882813 0 0 1 65.28515625 65.28515625c0 35.859375-29.53125 65.390625-64.01953125 65.390625h-1.265625a31.74609375 31.74609375 0 0 0-32.0625 31.95703125 31.74609375 31.74609375 0 0 0 32.0625 32.00976562A128.98828125 128.98828125 0 0 0 736.12109375 413.38671875a126.82617188 126.82617188 0 0 0-128.14453125-127.98632813h0.05273438z\" fill=\"#FFFFFF\" ></path></symbol><symbol id=\"authing-qq-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M849.621333 619.904a1364.053333 1364.053333 0 0 0-28.8-80.469333l-38.826666-95.829334c0-1.109333 0.512-19.968 0.512-29.696C782.506667 250.026667 704.298667 85.333333 512 85.333333S241.493333 250.026667 241.493333 413.866667c0 9.770667 0.469333 28.629333 0.512 29.738666l-38.826666 95.829334a1398.485333 1398.485333 0 0 0-28.8 80.469333c-36.693333 116.778667-24.789333 165.12-15.744 166.186667 19.413333 2.304 75.562667-87.893333 75.562666-87.893334 0 52.224 27.178667 120.405333 86.016 169.642667-21.973333 6.698667-48.938667 17.024-66.304 29.653333-15.573333 11.392-13.610667 23.04-10.794666 27.733334 12.330667 20.522667 211.413333 13.098667 268.928 6.698666 57.472 6.4 256.597333 13.824 268.885333-6.741333 2.816-4.693333 4.778667-16.298667-10.794667-27.690667-17.365333-12.629333-44.330667-22.954667-66.346666-29.696 58.837333-49.194667 86.016-117.376 86.016-169.642666 0 0 56.149333 90.24 75.562666 87.893333 9.045333-1.066667 20.906667-49.365333-15.786666-166.144\" fill=\"#12B7F5\" ></path></symbol><symbol id=\"authing-dingtalk-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M512 85.333333C276.352 85.333333 85.333333 276.352 85.333333 512s191.018667 426.666667 426.666667 426.666667 426.666667-191.018667 426.666667-426.666667S747.648 85.333333 512 85.333333z m191.573333 385.706667l-0.256 0.597333c-17.92 38.314667-64.682667 113.493333-64.682666 113.493334l-0.213334-0.512-13.653333 23.808h65.834667l-125.781334 167.210666 28.586667-113.749333h-51.84l18.005333-75.221333a721.493333 721.493333 0 0 0-52.181333 14.890666s-27.562667 16.128-79.445333-31.104c0 0-34.986667-30.805333-14.677334-38.485333 8.618667-3.285333 41.856-7.466667 68.010667-10.965333 35.413333-4.778667 57.130667-7.338667 57.130667-7.338667s-109.013333 1.621333-134.869334-2.432c-25.856-4.053333-58.666667-47.232-65.664-85.162667 0 0-10.794667-20.821333 23.253334-10.965333 34.048 9.856 174.976 38.4 174.976 38.4S352.853333 397.312 340.608 383.573333c-12.202667-13.653333-35.882667-74.837333-32.810667-112.384 0 0 1.322667-9.386667 10.965334-6.826666 0 0 135.509333 61.866667 228.138666 95.786666 92.672 33.92 173.226667 51.157333 162.816 95.061334-0.853333 3.712-3.072 9.216-6.144 15.786666v0.042667z\" fill=\"#0089FF\" ></path></symbol><symbol id=\"authing-linkedin-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M782.293333 782.464H668.586667v-178.218667c0-42.496-0.853333-97.194667-59.306667-97.194666-59.264 0-68.309333 46.250667-68.309333 94.08v181.333333h-113.749334V416h109.226667v49.92h1.493333c15.274667-28.757333 52.394667-59.178667 107.861334-59.178667 115.2 0 136.533333 75.861333 136.533333 174.549334v201.173333h-0.042667zM298.794667 365.866667a65.962667 65.962667 0 0 1-54.912-102.784 66.048 66.048 0 1 1 54.869333 102.784h0.042667z m57.002666 416.597333H241.749333V416H355.84v366.464h-0.042667zM839.253333 128H184.704C153.301333 128 128 152.746667 128 183.338667v657.322666C128 871.253333 153.344 896 184.661333 896h654.421334C870.4 896 896 871.253333 896 840.661333V183.338667C896 152.746667 870.4 128 839.082667 128h0.170666z\" fill=\"#0A66C2\" ></path></symbol><symbol id=\"authing-apple-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M495.957333 308.138667c-37.376 0-95.232-42.496-156.16-40.96-80.384 1.024-154.112 46.592-195.584 118.784-83.456 144.896-21.504 358.912 59.904 476.672 39.936 57.344 87.04 121.856 149.504 119.808 59.904-2.56 82.432-38.912 155.136-38.912 72.192 0 92.672 38.912 156.16 37.376 64.512-1.024 105.472-58.368 144.896-116.224 45.568-66.56 64.512-131.072 65.536-134.656-1.536-0.512-125.44-48.128-126.976-191.488-1.024-119.808 97.792-177.152 102.4-179.712-56.32-82.432-142.848-91.648-173.056-93.696-78.848-6.144-144.896 43.008-181.76 43.008z m133.12-120.832c33.28-39.936 55.296-95.744 49.152-151.04-47.616 2.048-104.96 31.744-139.264 71.68-30.72 35.328-57.344 92.16-50.176 146.432 52.736 4.096 107.008-27.136 140.288-67.072z\" ></path></symbol><symbol id=\"authing-apple-web-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M495.957333 308.138667c-37.376 0-95.232-42.496-156.16-40.96-80.384 1.024-154.112 46.592-195.584 118.784-83.456 144.896-21.504 358.912 59.904 476.672 39.936 57.344 87.04 121.856 149.504 119.808 59.904-2.56 82.432-38.912 155.136-38.912 72.192 0 92.672 38.912 156.16 37.376 64.512-1.024 105.472-58.368 144.896-116.224 45.568-66.56 64.512-131.072 65.536-134.656-1.536-0.512-125.44-48.128-126.976-191.488-1.024-119.808 97.792-177.152 102.4-179.712-56.32-82.432-142.848-91.648-173.056-93.696-78.848-6.144-144.896 43.008-181.76 43.008z m133.12-120.832c33.28-39.936 55.296-95.744 49.152-151.04-47.616 2.048-104.96 31.744-139.264 71.68-30.72 35.328-57.344 92.16-50.176 146.432 52.736 4.096 107.008-27.136 140.288-67.072z\" ></path></symbol><symbol id=\"authing-gitlab-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M932.317 567.767l-47.212-145.306-93.573-287.998c-4.813-14.817-25.777-14.817-30.591 0L667.36 422.46H356.628l-93.577-287.998c-4.813-14.817-25.776-14.817-30.593 0L138.885 422.46l-47.21 145.31a32.166 32.166 0 0 0 11.683 35.963l408.628 296.89 408.631-296.888a32.17 32.17 0 0 0 11.684-35.965\" fill=\"#FC6D26\" ></path><path d=\"M512.002 900.628l155.365-478.17H356.635z\" fill=\"#E24329\" ></path><path d=\"M512.004 900.628L356.64 422.472H138.902z\" fill=\"#FC6D26\" ></path><path d=\"M138.891 422.466l-47.214 145.31a32.164 32.164 0 0 0 11.686 35.962l408.629 296.89z\" fill=\"#FCA326\" ></path><path d=\"M138.893 422.46h217.738L263.053 134.46c-4.812-14.819-25.778-14.819-30.59 0z\" fill=\"#E24329\" ></path><path d=\"M512.002 900.628l155.365-478.154h217.738z\" fill=\"#FC6D26\" ></path><path d=\"M885.115 422.466l47.214 145.31a32.164 32.164 0 0 1-11.685 35.962l-408.63 296.89z\" fill=\"#FCA326\" ></path><path d=\"M885.096 422.46H667.361l93.577-287.999c4.815-14.819 25.779-14.819 30.591 0z\" fill=\"#E24329\" ></path></symbol><symbol id=\"authing-google-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M85.333333 85.333333h853.333334v853.333334H85.333333z\" fill=\"#000000\" opacity=\".01\" ></path><path d=\"M263.765333 512c0-27.093333 4.608-53.077333 12.8-77.44L132.992 327.168A409.898667 409.898667 0 0 0 89.258667 512c0 66.389333 15.701333 129.066667 43.648 184.661333l143.488-107.52A242.133333 242.133333 0 0 1 263.765333 512\" fill=\"#FBBC05\" ></path><path d=\"M515.925333 265.472a250.026667 250.026667 0 0 1 157.013334 54.954667l124.16-121.344c-75.648-64.426667-172.586667-104.277333-281.173334-104.277334-168.618667 0-313.557333 94.421333-382.933333 232.362667l143.616 107.392c33.066667-98.346667 127.36-169.088 239.317333-169.088\" fill=\"#EA4335\" ></path><path d=\"M515.925333 758.485333c-112 0-206.293333-70.698667-239.36-169.045333l-143.573333 107.392c69.333333 137.941333 214.272 232.32 382.933333 232.32 104.021333 0 203.349333-36.138667 277.973334-103.936l-136.32-103.210667c-38.442667 23.722667-86.869333 36.48-141.696 36.48\" fill=\"#34A853\" ></path><path d=\"M923.178667 512c0-24.661333-3.925333-51.2-9.728-75.861333h-397.568V597.333333h228.821333a187.733333 187.733333 0 0 1-87.125333 124.672l136.32 103.210667c78.293333-71.210667 129.28-177.237333 129.28-313.216\" fill=\"#4285F4\" ></path></symbol><symbol id=\"authing-alipay-web-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M914.005333 655.274667c-163.413333-49.194667-258.346667-78.506667-284.928-87.978667a529.621333 529.621333 0 0 0 56.32-141.653333H546.133333V378.538667h170.666667v-29.013334h-170.666667V270.677333h-65.536c-11.946667 0-13.312 10.581333-13.312 10.581334v67.925333H307.2v29.013333h160.085333v47.104H336.213333v26.282667h265.557334a467.925333 467.925333 0 0 1-37.888 92.842667c-60.074667-19.797333-93.525333-33.450667-166.912-40.277334-138.922667-13.312-171.008 63.146667-176.128 109.909334C213.333333 685.397333 276.48 743.424 370.688 743.424s157.013333-43.690667 216.746667-116.053333c49.792 23.808 142.421333 65.066667 277.930666 123.818666A426.24 426.24 0 0 1 512 938.666667C276.352 938.666667 85.333333 747.648 85.333333 512S276.352 85.333333 512 85.333333s426.666667 191.018667 426.666667 426.666667a425.898667 425.898667 0 0 1-24.661334 143.274667z m-554.24 43.093333c-99.669333 0-115.370667-63.146667-110.250666-89.429333 5.12-26.282667 34.133333-60.416 89.770666-60.416 63.829333 0 120.832 16.384 189.44 49.493333-48.469333 63.146667-107.52 100.352-168.96 100.352z\" fill=\"#3379F6\" ></path></symbol><symbol id=\"authing-alipay-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M914.005333 655.274667c-163.413333-49.194667-258.346667-78.506667-284.928-87.978667a529.621333 529.621333 0 0 0 56.32-141.653333H546.133333V378.538667h170.666667v-29.013334h-170.666667V270.677333h-65.536c-11.946667 0-13.312 10.581333-13.312 10.581334v67.925333H307.2v29.013333h160.085333v47.104H336.213333v26.282667h265.557334a467.925333 467.925333 0 0 1-37.888 92.842667c-60.074667-19.797333-93.525333-33.450667-166.912-40.277334-138.922667-13.312-171.008 63.146667-176.128 109.909334C213.333333 685.397333 276.48 743.424 370.688 743.424s157.013333-43.690667 216.746667-116.053333c49.792 23.808 142.421333 65.066667 277.930666 123.818666A426.24 426.24 0 0 1 512 938.666667C276.352 938.666667 85.333333 747.648 85.333333 512S276.352 85.333333 512 85.333333s426.666667 191.018667 426.666667 426.666667a425.898667 425.898667 0 0 1-24.661334 143.274667z m-554.24 43.093333c-99.669333 0-115.370667-63.146667-110.250666-89.429333 5.12-26.282667 34.133333-60.416 89.770666-60.416 63.829333 0 120.832 16.384 189.44 49.493333-48.469333 63.146667-107.52 100.352-168.96 100.352z\" fill=\"#3379F6\" ></path></symbol><symbol id=\"authing-github-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M512 85.333333C276.266667 85.333333 85.333333 276.266667 85.333333 512a426.410667 426.410667 0 0 0 291.754667 404.821333c21.333333 3.712 29.312-9.088 29.312-20.309333 0-10.112-0.554667-43.690667-0.554667-79.445333-107.178667 19.754667-134.912-26.112-143.445333-50.133334-4.821333-12.288-25.6-50.133333-43.733333-60.288-14.933333-7.978667-36.266667-27.733333-0.554667-28.245333 33.621333-0.554667 57.6 30.933333 65.621333 43.733333 38.4 64.512 99.754667 46.378667 124.245334 35.2 3.754667-27.733333 14.933333-46.378667 27.221333-57.045333-94.933333-10.666667-194.133333-47.488-194.133333-210.688 0-46.421333 16.512-84.778667 43.733333-114.688-4.266667-10.666667-19.2-54.4 4.266667-113.066667 0 0 35.712-11.178667 117.333333 43.776a395.946667 395.946667 0 0 1 106.666667-14.421333c36.266667 0 72.533333 4.778667 106.666666 14.378667 81.578667-55.466667 117.333333-43.690667 117.333334-43.690667 23.466667 58.666667 8.533333 102.4 4.266666 113.066667 27.178667 29.866667 43.733333 67.712 43.733334 114.645333 0 163.754667-99.712 200.021333-194.645334 210.688 15.445333 13.312 28.8 38.912 28.8 78.933333 0 57.045333-0.554667 102.912-0.554666 117.333334 0 11.178667 8.021333 24.490667 29.354666 20.224A427.349333 427.349333 0 0 0 938.666667 512c0-235.733333-190.933333-426.666667-426.666667-426.666667z\" fill=\"#333333\" ></path></symbol><symbol id=\"authing-facebook-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M512 85.333333C276.352 85.333333 85.333333 276.352 85.333333 512c0 212.949333 156.032 389.461333 360.021334 421.504V635.306667h-108.373334V512h108.373334V418.005333c0-106.922667 63.658667-165.973333 161.152-165.973333 46.677333 0 95.488 8.32 95.488 8.32v104.96h-53.76c-53.034667 0-69.546667 32.896-69.546667 66.645333V512h118.314667l-18.901334 123.306667h-99.413333v298.197333C782.634667 901.504 938.666667 724.906667 938.666667 512c0-235.648-191.018667-426.666667-426.666667-426.666667z\" fill=\"#3579EB\" ></path></symbol><symbol id=\"authing-twitter-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M945.578667 241.322667a357.717333 357.717333 0 0 1-102.485334 28.074666A179.029333 179.029333 0 0 0 921.6 170.666667c-34.986667 20.821333-73.344 35.413333-113.322667 43.306666a178.432 178.432 0 0 0-304.042666 162.730667 506.624 506.624 0 0 1-367.786667-186.453333 177.834667 177.834667 0 0 0-24.149333 89.728c0 61.866667 31.488 116.48 79.36 148.48a177.834667 177.834667 0 0 1-80.810667-22.272v2.218666a178.56 178.56 0 0 0 143.146667 174.933334 179.541333 179.541333 0 0 1-80.64 3.114666A178.56 178.56 0 0 0 340.053333 710.4a358.101333 358.101333 0 0 1-264.149333 73.898667 504.746667 504.746667 0 0 0 273.493333 80.213333c328.234667 0 507.733333-271.914667 507.733334-507.733333 0-7.68-0.213333-15.445333-0.554667-23.04a362.453333 362.453333 0 0 0 89.045333-92.373334l-0.042666-0.042666z\" fill=\"#488BBF\" ></path></symbol><symbol id=\"authing-baidu-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M252.885333 533.205333c88.021333-18.901333 76.032-124.117333 73.386667-147.114666-4.309333-35.413333-45.994667-97.365333-102.613333-92.458667-71.253333 6.4-81.621333 109.269333-81.621334 109.269333-9.642667 47.573333 23.04 149.205333 110.848 130.304z m93.44 182.954667c-2.56 7.381333-8.32 26.282667-3.328 42.752 9.813333 36.949333 41.898667 38.613333 41.898667 38.613333h46.08v-112.64H381.610667c-22.186667 6.570667-32.853333 23.850667-35.285334 31.274667z m69.888-359.338667c48.64 0 87.893333-55.978667 87.893334-125.141333 0-69.12-39.253333-125.013333-87.893334-125.013333-48.512 0-87.893333 55.893333-87.893333 125.013333 0 69.162667 39.381333 125.141333 87.893333 125.141333z m209.408 8.234667c64.938667 8.448 106.709333-60.885333 115.029334-113.450667 8.490667-52.48-33.450667-113.408-79.445334-123.904-46.08-10.581333-103.637333 63.274667-108.885333 111.36-6.272 58.88 8.405333 117.674667 73.301333 125.994667z m0 147.114667c-79.573333-123.946667-192.554667-73.514667-230.4-10.453334-37.589333 63.018667-96.256 102.826667-104.576 113.408-8.448 10.410667-121.429333 71.381333-96.341333 182.784 25.045333 111.317333 113.152 109.226667 113.152 109.226667s64.896 6.4 140.202667-10.496c75.349333-16.682667 140.202667 4.181333 140.202666 4.181333s176 58.88 224.128-54.528c48.128-113.493333-27.178667-172.288-27.178666-172.288s-100.522667-77.781333-159.232-161.834666h0.042666z m-256.341333 330.666666c-49.408-9.856-69.077333-43.562667-71.552-49.322666-2.432-5.845333-16.469333-32.938667-9.045333-79.061334 21.333333-69.077333 82.218667-74.026667 82.218666-74.026666h60.928v-74.88l51.84 0.853333v276.437333H369.28z m195.84-0.810666c-51.029333-13.141333-53.376-49.408-53.376-49.408v-145.578667l53.376-0.853333v130.816c3.285333 13.994667 20.608 16.512 20.608 16.512h54.229333v-146.474667h56.832v194.986667h-131.669333z m318.037333-388.693334c0-25.173333-20.906667-100.864-98.346666-100.864-77.610667 0-87.978667 71.466667-87.978667 121.984 0 48.213333 4.053333 115.498667 100.437333 113.365334 96.426667-2.133333 85.888-109.226667 85.888-134.485334z\" fill=\"#3C6FF6\" ></path></symbol><symbol id=\"authing-weibo-fill\" viewBox=\"0 0 1170 1024\"><path d=\"M827.56691779 497.27832031c-13.75751953-4.05-23.14335938-6.87832031-15.87919922-24.94335937 15.55751953-39.21328125 17.16503906-73.09248047 0.32167969-97.1991211-31.62832031-45.32167969-118.41416016-42.81416016-217.92832032-1.22167968 0 0-31.11416016 13.69335938-23.20751953-11.05664063 15.23583984-49.17919922 12.98583984-90.32167969-10.86328125-114.17167969-53.93671875-54-197.35839844 2.05664063-320.33671875 124.97167969C147.68107794 465.77832031 94.1952381 563.42832031 94.1952381 647.83496094c0 161.48583984 207 259.71416016 409.62832031 259.71416015 265.56416016 0 442.22167969-154.28583984 442.22167969-276.87832031 0-74.05664063-62.35751953-115.97167969-118.47832031-133.39335937z\" fill=\"#FC001D\" ></path><path d=\"M504.40187872 849.62832031c-161.61328125 15.94335938-301.11328125-57.02080078-311.65664062-163.28583984-10.47832031-106.07080078 112.11416016-205.07080078 273.66503906-221.01416016 161.61328125-16.07080078 301.17744141 57.08583984 311.72080078 163.15751953C788.48107794 734.55664063 666.01691779 833.55664063 504.40187872 849.62832031z\" fill=\"#FFFFFF\" ></path><path d=\"M520.53859748 547.03583984c-76.95087891-19.99335938-163.80087891 18.32167969-197.29335938 86.14248047-34.00751953 69.10751953-1.09248047 145.86416016 76.62832031 170.93583985 80.48583984 25.97167969 175.37167969-13.82167969 208.41503906-88.45664063 32.39912109-73.02832031-8.16503906-148.05-87.75-168.62167969z\" fill=\"#010101\" ></path><path d=\"M461.78107794 723.5c-15.55664063 25.07167969-49.11416016 35.87167969-74.31416015 24.42832031-24.87919922-11.25-32.20751953-40.30664063-16.52167969-64.60664062 15.49248047-24.17167969 47.82832031-35.03583984 72.77167969-24.55664063 25.32832031 10.73496094 33.42832031 39.59912109 18.06416015 64.7991211z m51.42832032-66.08496094c-5.65664063 9.70664063-18.19335938 14.39912109-27.9 10.28496094-9.64248047-3.92167969-12.66416016-14.78583984-7.2-24.3 5.59335937-9.45 17.61416016-14.01416016 27.19335937-10.28583984 9.83496094 3.66503906 13.37080078 14.59335938 7.90664063 24.3z\" fill=\"#FFFFFF\" ></path><path d=\"M891.20939826 434.6a32.33496094 32.33496094 0 0 0 40.56416015-20.7 125.87167969 125.87167969 0 0 0-145.99248047-161.93583984 32.14248047 32.14248047 0 1 0 13.5 62.87167968 61.90751953 61.90751953 0 0 1 58.62832032 18.83496094 61.26416016 61.26416016 0 0 1 12.72832031 60.23671875 32.14248047 32.14248047 0 0 0 20.57167969 40.69248047z\" fill=\"#FF9500\" ></path><path d=\"M1003.96691779 201.82167969a258.42832031 258.42832031 0 0 0-245.95751953-79.71416016 37.41503906 37.41503906 0 1 0 15.68583984 73.28496094 183.72832031 183.72832031 0 0 1 213.36416016 236.37919922 37.28583984 37.28583984 0 1 0 71.1 23.14248047v-0.06416016a258.81416016 258.81416016 0 0 0-54.19335938-253.02832031z\" fill=\"#FF8D18\" ></path></symbol><symbol id=\"authing-wechatwork-service-provider-qrconnect-fill\" viewBox=\"0 0 1228 1024\"><path d=\"M790.74775187 745.54983521a13.5 13.5 0 0 0 1.6875 20.58782958 173.13766479 173.13766479 0 0 1 53.32516479 103.9501648 56.36233521 56.36233521 0 1 0 60.24407959-70.875 172.96875 172.96875 0 0 1-96.1875-53.66299438 13.5 13.5 0 0 0-19.06924438 0z\" fill=\"#FB6500\" ></path><path d=\"M1019.57291666 656.28125a56.19342041 56.19342041 0 0 0-16.19934082 33.91891479 172.96875 172.96875 0 0 1-53.49407959 96.35559083 13.5 13.5 0 1 0 20.58700562 17.21282959 172.96875 172.96875 0 0 1 103.95016479-53.3251648 56.36233521 56.36233521 0 1 0-54.67483521-94.16217041z\" fill=\"#0082EF\" ></path><path d=\"M860.77900187 497.31842041a56.36233521 56.36233521 0 0 0 33.91891479 95.85049438 172.96875 172.96875 0 0 1 96.35559082 53.49325562 13.5 13.5 0 1 0 17.21282959-20.58700562 173.13766479 173.13766479 0 0 1-53.32434082-103.95016479 56.36233521 56.36233521 0 0 0-94.16299438-24.80657959z\" fill=\"#2DBC00\" ></path><path d=\"M833.10416666 585.40625l-1.01266479 1.01266479a172.79983521 172.79983521 0 0 1-105.46875 55.18157959 56.02532959 56.02532959 0 0 0-24.97467042 94.16217041A56.36233521 56.36233521 0 0 0 797.49775187 701.84375a173.13766479 173.13766479 0 0 1 53.66299438-96.35559083 13.5 13.5 0 0 0-18.05657959-20.08190917z\" fill=\"#FFCC00\" ></path><path d=\"M492.56699625 98.90032959C391.48508707 110.03717041 299.85416666 153.23733521 234.04166666 220.73733521c-26.15625 26.66299438-47.41891479 56.70016479-63.11233521 88.76266479a309.15032959 309.15032959 0 0 0 21.76858521 312.1875c17.88766479 27 47.25 60.75 74.08108521 84.71282959l-12.14950562 95.51184082-1.35049438 4.05065918c-0.33782959 1.18075562-0.33782959 2.53125-0.50592042 3.71200562l-0.33782958 3.03799438 0.33782958 3.03717041a30.71282959 30.71282959 0 0 0 46.23733521 23.79391479h0.50592041l1.8564148-1.35049438 29.02532958-14.51184082 86.56842042-43.53799438a446.84967041 446.84967041 0 0 0 126.5625 17.38174438A453.9375 453.9375 0 0 0 698.77982584 770.52532959a56.19342041 56.19342041 0 0 1-38.30657959-58.89440918 381.20608521 381.20608521 0 0 1-159.63684082 15.86315918l-8.60641479-1.18157959a385.93157959 385.93157959 0 0 1-57.375-11.98059082 39.15032959 39.15032959 0 0 0-30.7128296 3.20526123l-2.3623352 1.18157959-71.21200561 41.84967041-3.03799439 1.8564148c-1.6875 1.01266479-2.53125 1.35049438-3.375 1.35049438a4.89440918 4.89440918 0 0 1-4.55657959-5.0625l2.70016479-10.96875 3.20690919-11.9814148 5.0625-19.74407958 5.90625-21.9375a29.86907959 29.86907959 0 0 0-10.80065919-33.24325562 311.34375 311.34375 0 0 1-71.88684081-74.92565918 243.50592041 243.50592041 0 0 1-17.55065919-246.03717041c12.82516479-25.65032959 29.70016479-49.44342041 50.625-70.875 54-55.6875 129.9375-91.125 213.97549439-100.23733521a398.58782959 398.58782959 0 0 1 87.41217041 0c83.53125 9.61825562 159.13174438 45.5625 212.7939148 100.91217042 20.75592041 21.43157959 37.63092041 45.5625 50.11907959 71.21282958 16.70608521 34.08782959 25.14358521 70.20016479 25.1435852 107.15625 0 3.88092041-0.33782959 7.76184083-0.50674439 11.47467042a56.19342041 56.19342041 0 0 1 69.1875 8.09967041l2.53125 3.03799438a307.46282959 307.46282959 0 0 0-30.71200561-159.97467041 344.58782959 344.58782959 0 0 0-62.4375-88.7626648A423.5625 423.5625 0 0 0 596.85416666 99.23733521a474.69342041 474.69342041 0 0 0-104.28717041-0.33782959z\" fill=\"#0082EF\" ></path></symbol><symbol id=\"authing-slack-5\" viewBox=\"0 0 1024 1024\"><path d=\"M305.14941406 613.84326172c0 45.74681282-34.83790398 82.85888672-77.84937858 82.85888672-42.97825813 0-77.84860611-37.1120739-77.84860611-82.85888672s34.87034798-82.85888672 77.84860611-82.85888672h77.84937858V613.84326172z m38.92507554 0c0-45.81324577 34.8695755-82.8921032 77.8810501-82.8921032 42.97903061 0 77.85015107 37.1120739 77.85015107 82.85888672v207.24609375c0 45.7800293-34.87112046 82.8921032-77.85015107 82.8921032-43.01147461 0-77.88105011-37.1120739-77.8810501-82.8921032V613.81004524z\" fill=\"#E01E5A\" ></path><path d=\"M421.9230957 282.27562141c-42.97825813 0-77.84937859-37.11130142-77.84937858-82.89133071C344.07371712 153.6042614 378.94483757 116.4921875 421.9230957 116.4921875c43.01147461 0 77.88182258 37.1120739 77.88182259 82.8921032v82.89133071H421.9230957z m0 41.42944336c43.01147461 0 77.88182258 37.14529038 77.88182259 82.8921032 0 45.81324577-34.87034798 82.8921032-77.88182259 82.8921032H227.30003548c-42.97825813 0-77.84860611-37.1120739-77.84860611-82.8921032 0-45.74681282 34.87034798-82.8921032 77.84860611-82.8921032h194.62306022z\" fill=\"#36C5F0\" ></path><path d=\"M733.35305405 406.59716797c0-45.74681282 34.8371315-82.8921032 77.84860611-82.8921032 42.97825813 0 77.84937859 37.14529038 77.84937858 82.8921032 0 45.81324577-34.87112046 82.8921032-77.84937858 82.8921032H733.35228157V406.59716797z m-38.92507553 0c0 45.81324577-34.87034798 82.8921032-77.88182259 82.8921032-42.97903061 0-77.84937859-37.1120739-77.84937859-82.8921032V199.3842907C538.69677734 153.6042614 573.56712532 116.4921875 616.54615593 116.4921875c43.01147461 0 77.88182258 37.1120739 77.88182259 82.8921032v207.21287727z\" fill=\"#2EB67D\" ></path><path d=\"M616.57859993 738.16480828c42.97903061 0 77.84937859 37.11130142 77.84937859 82.89133071 0 45.7800293-34.87034798 82.8921032-77.84937859 82.8921032-43.01147461 0-77.88182258-37.1120739-77.88182259-82.8921032V738.16558076h77.88182259z m0-41.46265984c-43.01147461 0-77.88182258-37.1120739-77.88182259-82.8921032 0-45.74681282 34.87034798-82.89133072 77.88182259-82.89133071h194.58984375c43.01147461 0 77.84937859 37.1445179 77.84937859 82.89133071 0 45.81324577-34.83790398 82.8921032-77.84937859 82.8921032H616.57859993z\" fill=\"#ECB22E\" ></path></symbol><symbol id=\"authing-wechatwork-corp-qrconnect-fill\" viewBox=\"0 0 1228 1024\"><path d=\"M790.74775187 745.54983521a13.5 13.5 0 0 0 1.6875 20.58782958 173.13766479 173.13766479 0 0 1 53.32516479 103.9501648 56.36233521 56.36233521 0 1 0 60.24407959-70.875 172.96875 172.96875 0 0 1-96.1875-53.66299438 13.5 13.5 0 0 0-19.06924438 0z\" fill=\"#FB6500\" ></path><path d=\"M1019.57291666 656.28125a56.19342041 56.19342041 0 0 0-16.19934082 33.91891479 172.96875 172.96875 0 0 1-53.49407959 96.35559083 13.5 13.5 0 1 0 20.58700562 17.21282959 172.96875 172.96875 0 0 1 103.95016479-53.3251648 56.36233521 56.36233521 0 1 0-54.67483521-94.16217041z\" fill=\"#0082EF\" ></path><path d=\"M860.77900187 497.31842041a56.36233521 56.36233521 0 0 0 33.91891479 95.85049438 172.96875 172.96875 0 0 1 96.35559082 53.49325562 13.5 13.5 0 1 0 17.21282959-20.58700562 173.13766479 173.13766479 0 0 1-53.32434082-103.95016479 56.36233521 56.36233521 0 0 0-94.16299438-24.80657959z\" fill=\"#2DBC00\" ></path><path d=\"M833.10416666 585.40625l-1.01266479 1.01266479a172.79983521 172.79983521 0 0 1-105.46875 55.18157959 56.02532959 56.02532959 0 0 0-24.97467042 94.16217041A56.36233521 56.36233521 0 0 0 797.49775187 701.84375a173.13766479 173.13766479 0 0 1 53.66299438-96.35559083 13.5 13.5 0 0 0-18.05657959-20.08190917z\" fill=\"#FFCC00\" ></path><path d=\"M492.56699625 98.90032959C391.48508707 110.03717041 299.85416666 153.23733521 234.04166666 220.73733521c-26.15625 26.66299438-47.41891479 56.70016479-63.11233521 88.76266479a309.15032959 309.15032959 0 0 0 21.76858521 312.1875c17.88766479 27 47.25 60.75 74.08108521 84.71282959l-12.14950562 95.51184082-1.35049438 4.05065918c-0.33782959 1.18075562-0.33782959 2.53125-0.50592042 3.71200562l-0.33782958 3.03799438 0.33782958 3.03717041a30.71282959 30.71282959 0 0 0 46.23733521 23.79391479h0.50592041l1.8564148-1.35049438 29.02532958-14.51184082 86.56842042-43.53799438a446.84967041 446.84967041 0 0 0 126.5625 17.38174438A453.9375 453.9375 0 0 0 698.77982584 770.52532959a56.19342041 56.19342041 0 0 1-38.30657959-58.89440918 381.20608521 381.20608521 0 0 1-159.63684082 15.86315918l-8.60641479-1.18157959a385.93157959 385.93157959 0 0 1-57.375-11.98059082 39.15032959 39.15032959 0 0 0-30.7128296 3.20526123l-2.3623352 1.18157959-71.21200561 41.84967041-3.03799439 1.8564148c-1.6875 1.01266479-2.53125 1.35049438-3.375 1.35049438a4.89440918 4.89440918 0 0 1-4.55657959-5.0625l2.70016479-10.96875 3.20690919-11.9814148 5.0625-19.74407958 5.90625-21.9375a29.86907959 29.86907959 0 0 0-10.80065919-33.24325562 311.34375 311.34375 0 0 1-71.88684081-74.92565918 243.50592041 243.50592041 0 0 1-17.55065919-246.03717041c12.82516479-25.65032959 29.70016479-49.44342041 50.625-70.875 54-55.6875 129.9375-91.125 213.97549439-100.23733521a398.58782959 398.58782959 0 0 1 87.41217041 0c83.53125 9.61825562 159.13174438 45.5625 212.7939148 100.91217042 20.75592041 21.43157959 37.63092041 45.5625 50.11907959 71.21282958 16.70608521 34.08782959 25.14358521 70.20016479 25.1435852 107.15625 0 3.88092041-0.33782959 7.76184083-0.50674439 11.47467042a56.19342041 56.19342041 0 0 1 69.1875 8.09967041l2.53125 3.03799438a307.46282959 307.46282959 0 0 0-30.71200561-159.97467041 344.58782959 344.58782959 0 0 0-62.4375-88.7626648A423.5625 423.5625 0 0 0 596.85416666 99.23733521a474.69342041 474.69342041 0 0 0-104.28717041-0.33782959z\" fill=\"#0082EF\" ></path></symbol><symbol id=\"authing-lark-internal-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M647.98825454 376.04032707a37.87141801 37.87141801 0 0 1 33.92715454-64.3719864 6.1852169 6.1852169 0 0 0 5.47376634-1.56812668L896.66688156 116.4921875 289.85129547 515.02038193l203.80471231 15.34292221z\" fill=\"#00D3B4\" ></path><path d=\"M116.4921875 341.82503892L289.85129547 515.02038193 896.66688156 116.4921875 116.4921875 341.82503892z\" fill=\"#00EED4\" ></path><path d=\"M713.90982819 336.65871811a6.17594719 6.17594719 0 0 0-1.52950287 5.43514252 37.87141801 37.87141801 0 0 1-64.37275887 33.96577835L493.68458938 530.34399222l15.21778108 203.92985344 398.65333557-606.8928337z\" fill=\"#0069FF\" ></path><path d=\"M907.55570603 127.38101196L508.90237046 734.23522186 682.18423079 907.5078125 907.5564785 127.38101196z\" fill=\"#007FFF\" ></path></symbol><symbol id=\"authing-slack-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M637.12843728 142.06803802C623.9893464 102.64994141 581.80681662 81.21260801 542.38789685 93.66038418c-39.41644868 13.13909089-60.85460605 55.3232678-48.40682986 94.74054043l194.32110443 597.48585755c13.13909089 36.65119153 53.24850137 57.39721106 91.28314545 46.33206262 40.10858652-11.75563834 64.31200103-53.93899127 51.17291015-92.66494921 0-1.38345254-193.62979056-597.48585755-193.62978974-597.48585755z\" fill=\"#E9A823\" ></path><path d=\"M336.31197723 240.26597344c-13.13991485-39.41727264-55.3232678-60.85543002-94.74054043-48.407653s-60.85543002 55.3232678-48.40847699 94.74054043l194.3219284 597.48585671c13.13909089 36.65036755 53.24850137 57.39721106 91.28232147 46.33206345 40.10941049-11.75563834 64.31282501-53.93899127 51.17373414-92.66495004 0-1.38345254-193.62979056-597.48585755-193.62979057-597.48585755z\" fill=\"#3FB991\" ></path><path d=\"M881.93196198 637.20642648c39.41727264-13.13909089 60.85543002-55.32244382 48.40765384-94.74054043-13.13909089-39.41727264-55.3232678-60.85460605-94.74054043-48.40682987L237.42190396 688.38016062c-36.65119153 13.13909089-57.39803503 53.24850137-46.33288742 91.28232147 11.75646231 40.10941049 53.93981525 64.31282501 92.66577402 51.17373412 1.38262857 0 598.17717142-193.62979056 598.17717141-193.62978973z\" fill=\"#E11765\" ></path><path d=\"M361.89802115 805.94148782c38.72595795-12.44777618 89.20837821-29.04508685 143.14736947-46.33288742-12.44695222-38.72678192-29.04426289-89.20837821-46.33206262-143.14819345L315.56430975 662.79329355l46.33288742 143.14819427z\" fill=\"#472A49\" ></path><path d=\"M662.71530435 708.43486627c53.93981525-17.28862454 104.42223633-33.88511041 143.14819428-46.33288742-12.44777618-38.72595795-29.04508685-89.20837821-46.33288743-143.14736948l-143.14819345 46.33206263L662.71530435 708.43569025z\" fill=\"#CD2027\" ></path><path d=\"M783.73402656 336.38914245c39.41727264-13.13909089 60.85543002-55.32244382 48.407653-94.74054043s-55.3232678-60.85460605-94.74054043-48.40682904L139.91528241 387.56287741c-36.65036755 13.13909089-57.39721106 53.2476774-46.33206344 91.28232147 11.75563834 40.10941049 53.93899127 64.31282501 92.66495004 51.17373413 1.38345254 0 597.48585755-193.62979056 597.48585755-193.62979056z\" fill=\"#71CBDC\" ></path><path d=\"M264.39139961 505.12337982c38.72678192-12.44777618 89.20837821-29.04426289 143.14819344-46.33206263-17.28862454-53.94063922-33.88511041-104.42223633-46.3328866-143.14819427l-143.14819427 46.33206345 46.33288742 143.14901742z\" fill=\"#1D947E\" ></path><path d=\"M565.20950677 406.9254444c53.93981525-17.28780056 104.42141235-33.88511041 143.14737031-46.33206262-17.28862454-53.93981525-33.88511041-104.42223633-46.33206345-143.14819428l-143.14901742 47.0242013 46.33371057 142.45687957z\" fill=\"#66873A\" ></path></symbol><symbol id=\"authing-lark-public-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M647.98825454 376.04032707a37.87141801 37.87141801 0 0 1 33.92715454-64.3719864 6.1852169 6.1852169 0 0 0 5.47376634-1.56812668L896.66688156 116.4921875 289.85129547 515.02038193l203.80471231 15.34292221z\" fill=\"#00D3B4\" ></path><path d=\"M116.4921875 341.82503892L289.85129547 515.02038193 896.66688156 116.4921875 116.4921875 341.82503892z\" fill=\"#00EED4\" ></path><path d=\"M713.90982819 336.65871811a6.17594719 6.17594719 0 0 0-1.52950287 5.43514252 37.87141801 37.87141801 0 0 1-64.37275887 33.96577835L493.68458938 530.34399222l15.21778108 203.92985344 398.65333557-606.8928337z\" fill=\"#0069FF\" ></path><path d=\"M907.55570603 127.38101196L508.90237046 734.23522186 682.18423079 907.5078125 907.5564785 127.38101196z\" fill=\"#007FFF\" ></path></symbol><symbol id=\"authing-key-2-line\" viewBox=\"0 0 1024 1024\"><path d=\"M459.008 504.661333l334.890667-334.890666 60.330666 60.330666-60.330666 60.373334 105.557333 105.557333-60.330667 60.373333-105.6-105.6-60.330666 60.330667 90.496 90.496-60.330667 60.373333-90.496-90.538666-93.525333 93.525333a213.418667 213.418667 0 0 1-328.874667 268.544 213.333333 213.333333 0 0 1 268.544-328.874667z m-27.178667 268.501334A128 128 0 1 0 250.88 592.213333a128 128 0 0 0 180.992 180.992z\" ></path></symbol><symbol id=\"authing-diannao\" viewBox=\"0 0 1170 1024\"><path d=\"M1054.887 103.734v661.002h-155.53v77.765h155.53v77.765h-933.18v-77.765h155.53v-77.765h-155.53V103.734h933.18zM821.592 842.5v-77.765h-466.59v77.765h466.59zM977.122 181.5h-777.65V686.97h777.65V181.5z m-77.765 77.765v349.942h-622.12V259.264h622.12z\" ></path></symbol><symbol id=\"authing-a-erweima22\" viewBox=\"0 0 1024 1024\"><path d=\"M190.058 190.058h70v70h-70v-70z m195.97-125.971H64.088v321.942h125.971v55.991h70V386.03h125.97v-69.98h55.992v-55.992H386.03V64.087z m-69.98 251.943H134.087V134.086h181.963v181.963z m-125.97 447.913h69.98v69.98h-70v-69.98z m573.865-573.885h69.98v70h-69.98v-70zM512 506.34v75.64h69.98V512h55.991v-69.98H581.98V386.03H512v120.33z m0 255.961v71.642h69.98v-125.99h55.991v-69.98H512V762.3z m69.98 71.642h55.991v55.972H581.98v-55.992z m-139.96 55.972v70h139.96v-70H442.02z m265.931-181.963h-69.98v125.99h125.972v-69.998H707.95V707.95z m55.992 251.943h195.97v-69.98h-125.99v-55.992h-69.98v125.991zM959.913 512v-69.98h-125.99V512h125.99z m-69.999 251.943h70v69.98h-70v-69.98zM442.02 316.049H512v69.98h-69.98v-69.98zM763.943 442.02V386.03h195.97V64.087H637.971v69.999H512v55.972h125.971v70H581.98v55.99h55.991v69.98h69.98v55.992h55.992zM707.95 134.086h181.963v181.963H707.951V134.086z m0 447.894h55.992v55.991H707.95V581.98zM833.922 707.95h-69.98v55.992h125.972V637.97h70V581.98H833.921V707.95zM442.04 190.058H512v70h-69.98v-70zM260.057 512h55.992v69.98h-55.992V512z m181.963-69.98H316.05V512h69.98v69.98h55.991V442.02zM386.03 833.942V707.97h55.991v-69.999H190.058V512H64.087v69.98h69.999v55.991h-70v321.942H386.03v-69.999h55.991v-55.992H386.03z m-69.98 55.972H134.086V707.951h181.963v181.963zM442.02 581.98H512v55.991h-69.98V581.98zM637.971 512h69.98v69.98h-69.98V512z m125.972 0h69.98v69.98h-69.98V512z\" ></path></symbol><symbol id=\"authing-alipay\" viewBox=\"0 0 1024 1024\"><path d=\"M427.154 210.262l-1.819 59.431H185.792v45.481h242.573v78.84H228.24v43.057l203.153-1.823 203.76-1.818-3.641 14.553c-9.094 35.177-47.907 129.173-55.183 132.196-4.244 1.216-33.961-5.458-67.316-15.16-101.276-30.924-151.61-40.023-220.136-40.023-69.74 0.603-115.217 13.342-158.886 44.27-84.897 60.647-91.57 179.506-12.735 245.602 83.687 70.348 220.739 77.017 345.06 16.375 44.267-21.225 123.71-78.84 150.39-108.553l10.922-12.736 34.57 16.98c34.568 17.586 248.03 116.437 284.413 131.598l19.403 8.49V711.17l-52.762-13.95c-47.907-12.74-170.406-50.94-209.826-66.105l-15.16-6.066 20.012-41.238c21.231-42.444 63.68-162.522 63.68-180.108 0-8.491-12.128-9.702-106.128-9.702H555.71v-78.827h254.704v-40.022c0-1.817-57.614-3.032-127.353-2.425l-127.347 0.602V151.437H428.967l-1.813 58.825z m-23.657 395.392c31.535 10.922 73.382 27.896 92.786 38.206l35.167 18.805-19.404 24.255c-10.913 13.342-35.775 36.387-56.399 51.548-69.133 51.542-133.41 71.553-215.887 66.703-86.112-4.852-132.201-40.023-137.66-105.517-3.64-40.63 5.459-63.675 33.359-84.901 35.172-26.685 63.67-32.742 141.296-30.924 59.431 1.814 78.232 5.449 126.742 21.825z\" ></path></symbol><symbol id=\"authing-facebook\" viewBox=\"0 0 1024 1024\"><path d=\"M597.333 576H704l42.667-170.667H597.333V320c0-43.947 0-85.333 85.334-85.333h64V91.307c-13.91-1.835-66.432-5.974-121.899-5.974-115.84 0-198.101 70.699-198.101 200.534v119.466h-128V576h128v362.667h170.666V576z\" ></path></symbol><symbol id=\"authing-twitter\" viewBox=\"0 0 1024 1024\"><path d=\"M945.579 241.323a357.717 357.717 0 0 1-102.486 28.074 179.03 179.03 0 0 0 78.507-98.73c-34.987 20.821-73.344 35.413-113.323 43.306a178.432 178.432 0 0 0-304.042 162.731 506.624 506.624 0 0 1-367.787-186.453 177.835 177.835 0 0 0-24.15 89.728c0 61.866 31.489 116.522 79.36 148.522a177.835 177.835 0 0 1-80.81-22.314v2.218a178.56 178.56 0 0 0 143.147 174.976 179.627 179.627 0 0 1-80.64 3.072A178.56 178.56 0 0 0 340.053 710.4a358.144 358.144 0 0 1-264.149 73.899 504.747 504.747 0 0 0 273.493 80.213c328.235 0 507.734-271.915 507.734-507.733 0-7.68-0.214-15.446-0.555-23.04a362.496 362.496 0 0 0 89.045-92.374z\" ></path></symbol><symbol id=\"authing-slack-3\" viewBox=\"0 0 1024 1024\"><path d=\"M218.01 645.78c0 58.635-47.893 106.527-106.527 106.527-58.63 0-106.527-47.892-106.527-106.527 0-58.634 47.898-106.526 106.527-106.526h106.532V645.78z m53.683 0c0-58.634 47.892-106.526 106.527-106.526 58.634 0 106.526 47.892 106.526 106.526v266.737c0 58.63-47.892 106.527-106.526 106.527-58.635 0-106.527-47.898-106.527-106.527V645.78z\" ></path><path d=\"M378.22 218.01c-58.635 0-106.527-47.893-106.527-106.527 0-58.63 47.892-106.527 106.521-106.527 58.635 0 106.527 47.898 106.527 106.527v106.532H378.22z m0 53.683c58.634 0 106.526 47.892 106.526 106.527 0 58.634-47.892 106.526-106.526 106.526H111.483c-58.63 0-106.527-47.892-106.527-106.526 0-58.635 47.898-106.527 106.527-106.527H378.22z\" ></path><path d=\"M805.99 378.22c0-58.635 47.893-106.527 106.527-106.527 58.63 0 106.527 47.892 106.527 106.527 0 58.634-47.898 106.526-106.527 106.526H805.985V378.22z m-53.683 0c0 58.634-47.892 106.526-106.527 106.526-58.634 0-106.526-47.892-106.526-106.526V111.483c0-58.63 47.892-106.527 106.526-106.527 58.635 0 106.527 47.898 106.527 106.527V378.22z\" ></path><path d=\"M645.78 805.99c58.635 0 106.527 47.893 106.527 106.527 0 58.63-47.892 106.527-106.527 106.527-58.634 0-106.526-47.898-106.526-106.527V805.985H645.78z m0-53.683c-58.634 0-106.526-47.892-106.526-106.527 0-58.634 47.892-106.526 106.526-106.526h266.737c58.63 0 106.527 47.892 106.527 106.526 0 58.635-47.898 106.527-106.527 106.527H645.78z\" ></path></symbol><symbol id=\"authing-slack\" viewBox=\"0 0 1024 1024\"><path d=\"M899.2 451.2c48 0 83.2 35.2 83.2 80 0 35.2-19.2 60.8-54.4 73.6l-96 38.4 32 96c3.2 9.6 3.2 19.2 3.2 25.6 0 44.8-35.2 83.2-83.2 83.2-35.2 0-67.2-22.4-80-57.6l-32-92.8-176 60.8 32 92.8c3.2 9.6 3.2 19.2 3.2 25.6 0 44.8-35.2 83.2-83.2 83.2-35.2 0-67.2-22.4-80-57.6l-32-92.8-86.4 28.8c-9.6 3.2-19.2 6.4-28.8 6.4-44.8 0-80-35.2-80-80 0-35.2 22.4-67.2 57.6-80L288 656l-60.8-179.2-89.6 32c-6.4 3.2-16 3.2-25.6 3.2-44.8 0-80-35.2-80-80 0-35.2 22.4-67.2 57.6-80l89.6-28.8-32-89.6c-3.2-9.6-3.2-19.2-3.2-28.8 0-44.8 35.2-83.2 83.2-83.2 35.2 0 67.2 22.4 80 57.6l32 92.8L512 211.2l-32-92.8c-3.2-9.6-3.2-19.2-3.2-25.6 0-44.8 38.4-83.2 83.2-83.2 35.2 0 67.2 22.4 80 57.6l28.8 92.8 92.8-32c9.6-3.2 16-3.2 25.6-3.2 44.8 0 83.2 32 83.2 80 0 35.2-28.8 64-60.8 76.8l-89.6 32 60.8 179.2 92.8-32c9.6-6.4 19.2-9.6 25.6-9.6zM444.8 601.6l176-60.8L560 361.6l-176 60.8 60.8 179.2z\" ></path></symbol><symbol id=\"authing-linkedin\" viewBox=\"0 0 1024 1024\"><path d=\"M313.6 889.6H157.867V390.4H313.6v499.2z m-76.8-567.467c-23.467 0-44.8-8.533-64-25.6-17.067-17.066-25.6-38.4-25.6-64s8.533-44.8 25.6-64 38.4-25.6 64-25.6 44.8 8.534 64 25.6c17.067 17.067 25.6 38.4 25.6 64s-8.533 44.8-25.6 64c-17.067 17.067-38.4 25.6-64 25.6zM893.867 889.6H738.133V646.4c0-40.533-4.266-68.267-10.666-87.467-12.8-29.866-36.267-44.8-72.534-44.8s-57.6 12.8-72.533 40.534c-10.667 19.2-17.067 49.066-17.067 87.466V889.6h-153.6V390.4h149.334v68.267h2.133c10.667-21.334 29.867-40.534 53.333-55.467 25.6-17.067 57.6-25.6 93.867-25.6 72.533 0 123.733 23.467 151.467 68.267C883.2 482.133 896 539.733 896 616.533V889.6z\" ></path></symbol><symbol id=\"authing-delete-bin-6-line\" viewBox=\"0 0 1024 1024\"><path d=\"M298.667 170.667V85.333h426.666v85.334h213.334V256h-85.334v640a42.667 42.667 0 0 1-42.666 42.667H213.333A42.667 42.667 0 0 1 170.667 896V256H85.333v-85.333h213.334zM256 256v597.333h512V256H256z m128 128h85.333v341.333H384V384z m170.667 0H640v341.333h-85.333V384z\" ></path></symbol><symbol id=\"authing-more-fill\" viewBox=\"0 0 1024 1024\"><path d=\"M512 128c-46.912 0-85.312 38.4-85.312 85.312 0 46.976 38.4 85.376 85.312 85.376s85.312-38.4 85.312-85.376C597.312 166.4 558.912 128 512 128z m0 597.312c-46.912 0-85.312 38.4-85.312 85.376C426.688 857.6 465.088 896 512 896s85.312-38.4 85.312-85.312c0-46.976-38.4-85.376-85.312-85.376z m0-298.624c-46.912 0-85.312 38.4-85.312 85.312s38.4 85.312 85.312 85.312 85.312-38.4 85.312-85.312-38.4-85.312-85.312-85.312z\" ></path></symbol><symbol id=\"authing-gitlab\" viewBox=\"0 0 1024 1024\"><path d=\"M958.326 570.912l-50.136-154.3L808.827 110.8c-5.111-15.733-27.372-15.733-32.485 0l-99.365 305.812H347.024L247.656 110.8c-5.11-15.733-27.37-15.733-32.484 0l-99.363 305.812-50.134 154.3c-4.575 14.073 0.437 29.49 12.407 38.19L512 924.358 945.92 609.1a34.16 34.16 0 0 0 12.407-38.19\" ></path></symbol><symbol id=\"authing-yuyan\" viewBox=\"0 0 1024 1024\"><path d=\"M960 511.616A447.808 447.808 0 0 0 512 64C264.576 64 64 264.384 64 511.616a447.808 447.808 0 0 0 392.32 444.16 224.384 224.384 0 0 0 60.352 3.456A447.744 447.744 0 0 0 960 511.616z m-64 6.4a437.952 437.952 0 0 0-8.768-65.472c0.384-7.616 0.512-14.784 0.256-21.504 5.696 26.496 8.512 53.504 8.512 80.64v6.272z m-768-6.4c0-26.56 2.752-53.12 8.192-79.104 16.576 17.728 55.68 17.28 65.216-9.216 17.024 10.176 39.936 12.032 39.936 32.32 0 67.072 2.432 138.944 63.36 140.032 1.664 0 33.92 12.224 49.28 52.096 5.312 13.76 26.304 0 49.344 0 11.52 0 0 19.328 0 61.184 0 41.92 89.92 105.984 89.92 105.984-0.384 27.584 0.768 49.92 3.008 67.712a150.912 150.912 0 0 0-50.816 6.848A383.68 383.68 0 0 1 128 511.616z m478.592 371.968c-2.048-9.728-10.752-15.04-26.624-10.88 12.672-54.016 18.816-84.288 45.312-107.2 38.272-33.216 4.48-70.144-24.576-65.792-23.04 3.456-8.448-28.416-29.056-30.208-20.544-1.728-47.232-42.432-76.736-56.512-15.616-7.424-30.976-27.328-55.104-28.16-21.376-0.832-52.672 18.048-52.672 3.456 0-46.912-4.8-80.448-5.76-93.76-0.768-10.752-7.04-3.648 21.888-2.944 15.744 0.384 8.064-31.616 23.616-32.832 15.296-1.28 51.712 14.272 60.992 8.128 8.64-5.76 63.36 143.744 63.36 24.704 0-14.08-7.296-38.72 0-52.096 28.992-52.864 56.064-95.936 53.632-102.208-1.344-3.584-29.568-6.464-52.16 1.088-7.68 2.56 2.432 14.464-8.512 17.024-41.024 9.472-77.248-11.072-64.64-30.336 13.056-19.84 60.16-8.64 64.256-48.256 2.368-22.72 4.352-49.088 5.632-68.608 55.232 8.64 49.152-71.616-32.896-80.192a384.128 384.128 0 0 1 358.272 257.92 15.552 15.552 0 0 0-9.152-4.16c-24.832-62.016-84.992-17.152-64.64 37.504-109.44 84.16-81.408 142.784-45.44 176.384 18.944 17.728 36.992 44.288 48.704 63.36-12.8 37.248 47.104 22.336 76.672-40.96a384.576 384.576 0 0 1-274.432 265.6z\" ></path></symbol><symbol id=\"authing-anzhuo\" viewBox=\"0 0 1024 1024\"><path d=\"M141.1 331.2c-35 0-63.3 28.3-63.3 63.2v264.7c0 34.9 28.4 63.2 63.3 63.2 35 0 63.3-28.3 63.3-63.2V394.4c0-34.9-28.3-63.2-63.3-63.2zM228.9 753.3c0 37.3 30.3 67.5 67.6 67.5h46.1v140c0 34.9 28.4 63.2 63.3 63.2 35 0 63.3-28.3 63.3-63.2v-140h85.5v140c0 34.9 28.4 63.2 63.3 63.2 35 0 63.3-28.3 63.3-63.2v-140h46.1c37.3 0 67.6-30.2 67.6-67.5V343.1H228.9v410.2zM651.8 93.4L696 13c2.4-4.2 0.8-9.6-3.5-11.9-4.2-2.3-9.6-0.8-11.9 3.5l-44.7 81.2C598.4 69.2 556.4 59.9 512 59.9c-44.4 0-86.4 9.3-123.9 25.8L343.4 4.6c-2.3-4.3-7.7-5.8-11.9-3.5-4.3 2.3-5.9 7.7-3.5 11.9l44.2 80.4c-86.8 44.8-145.5 130-145.5 227.7h570.5c0.1-97.8-58.6-182.9-145.4-227.7zM382.2 218c-13.2 0-23.9-10.7-23.9-23.9s10.7-23.9 23.9-23.9 23.9 10.7 23.9 23.9c-0.1 13.2-10.8 23.9-23.9 23.9z m259.7 0c-13.2 0-23.9-10.7-23.9-23.9s10.7-23.9 23.9-23.9 23.9 10.7 23.9 23.9c-0.1 13.2-10.8 23.9-23.9 23.9zM882.9 331.2c-35 0-63.3 28.3-63.3 63.2v264.7c0 34.9 28.4 63.2 63.3 63.2 35 0 63.3-28.3 63.3-63.2V394.4c0-34.9-28.3-63.2-63.3-63.2z\" ></path></symbol><symbol id=\"authing-lark-public\" viewBox=\"0 0 1024 1024\"><path d=\"M933.875 98.5625L726.53414917 322.64486695a6.61651612 6.61651612 0 0 0-1.64300537 5.81726073 40.54449463 40.54449463 0 0 1-68.92053223 36.37023927L490.72827148 530.02856445l16.29821778 218.30960083L692.5625 933.875z m0 0\" ></path><path d=\"M931.6098938 104.2026062l-205.12023926 221.68377685a6.61651612 6.61651612 0 0 0-1.64300537 5.86175538 39.96688843 39.96688843 0 0 1-68.21026612 35.92611694L494.23675537 530.07388305a3.28601074 3.28601074 0 0 0-0.93273925 2.53125l16.03125 214.40148927 413.61547851-623.97537232 8.88162232-18.74047852z m0 0\" ></path><path d=\"M925.48199463 90.16949463L701.39880372 297.46502685a6.61651612 6.61651612 0 0 1-5.86175538 1.68832398 40.54449463 40.54449463 0 0 0-36.32574462 68.92053222L493.97143555 533.31622315l-218.22143555-16.43005372L90.125 331.43667602z m0 0\" ></path><path d=\"M919.8427124 92.65625l-221.77359008 205.12023926a6.61651612 6.61651612 0 0 1-5.77276612 1.64300537 39.96688843 39.96688843 0 0 0-35.92611695 68.21026612L493.92611695 530.02938843a3.28601074 3.28601074 0 0 1-2.57574463 0.93273925l-214.40148927-16.03125L900.96875 101.31539917l18.74047852-8.88079834z m0 0\" ></path></symbol><symbol id=\"authing-lark-internal\" viewBox=\"0 0 1024 1024\"><path d=\"M933.875 98.5625L726.53414917 322.64486695a6.61651612 6.61651612 0 0 0-1.64300537 5.81726073 40.54449463 40.54449463 0 0 1-68.92053223 36.37023927L490.72827148 530.02856445l16.29821778 218.30960083L692.5625 933.875z m0 0\" ></path><path d=\"M931.6098938 104.2026062l-205.12023926 221.68377685a6.61651612 6.61651612 0 0 0-1.64300537 5.86175538 39.96688843 39.96688843 0 0 1-68.21026612 35.92611694L494.23675537 530.07388305a3.28601074 3.28601074 0 0 0-0.93273925 2.53125l16.03125 214.40148927 413.61547851-623.97537232 8.88162232-18.74047852z m0 0\" ></path><path d=\"M925.48199463 90.16949463L701.39880372 297.46502685a6.61651612 6.61651612 0 0 1-5.86175538 1.68832398 40.54449463 40.54449463 0 0 0-36.32574462 68.92053222L493.97143555 533.31622315l-218.22143555-16.43005372L90.125 331.43667602z m0 0\" ></path><path d=\"M919.8427124 92.65625l-221.77359008 205.12023926a6.61651612 6.61651612 0 0 1-5.77276612 1.64300537 39.96688843 39.96688843 0 0 0-35.92611695 68.21026612L493.92611695 530.02938843a3.28601074 3.28601074 0 0 1-2.57574463 0.93273925l-214.40148927-16.03125L900.96875 101.31539917l18.74047852-8.88079834z m0 0\" ></path></symbol><symbol id=\"authing-guanbi7-01copy_1\" viewBox=\"0 0 1024 1024\"><path d=\"M0.00007 512.306485a511.999485 511.999485 0 0 1 1023.99797-0.512v0.512a510.974486 510.974486 0 0 1-511.999485 511.691485C228.86384 1023.99797 0.00007 794.725201 0.00007 512.306485z m546.200451 0l178.89282-178.78982a23.244977 23.244977 0 0 0 0-33.075967l-1.126999-1.023999a23.244977 23.244977 0 0 0-33.176967 0L511.999555 478.514519l-178.78982-179.19982a23.244977 23.244977 0 0 0-33.177967 0l-1.023999 1.023999a23.244977 23.244977 0 0 0 0 33.074967l178.78982 179.199819-178.89282 178.789821a23.244977 23.244977 0 0 0 0 33.177966l1.126999 1.023999a23.244977 23.244977 0 0 0 33.176967 0L511.999555 547.12245 690.789375 725.80927a23.244977 23.244977 0 0 0 33.177967 0l1.023999-1.023999a23.244977 23.244977 0 0 0 0-33.176967l-178.78982-179.199819z\" ></path></symbol><symbol id=\"authing-guanbi\" viewBox=\"0 0 1024 1024\"><path d=\"M583.168 523.776L958.464 148.48c18.944-18.944 18.944-50.176 0-69.12l-2.048-2.048c-18.944-18.944-50.176-18.944-69.12 0L512 453.12 136.704 77.312c-18.944-18.944-50.176-18.944-69.12 0l-2.048 2.048c-19.456 18.944-19.456 50.176 0 69.12l375.296 375.296L65.536 899.072c-18.944 18.944-18.944 50.176 0 69.12l2.048 2.048c18.944 18.944 50.176 18.944 69.12 0L512 594.944 887.296 970.24c18.944 18.944 50.176 18.944 69.12 0l2.048-2.048c18.944-18.944 18.944-50.176 0-69.12L583.168 523.776z\" ></path></symbol><symbol id=\"authing-apple-web\" viewBox=\"0 0 1024 1024\"><path d=\"M797.3 656c24.6 34.8 52.8 57.3 84.6 67.5-13.8 42.6-35.7 87-65.7 133.2-46.2 69.6-91.8 104.4-136.8 104.4-16.8 0-41.7-5.7-74.7-17.1-30.6-11.4-57.3-17.1-80.1-17.1-22.8 0-48 6-75.6 18-28.8 11.4-52.5 17.1-71.1 17.1-54 0-107.1-45.9-159.3-137.7-52.2-90.6-78.3-179.7-78.3-267.3 0-81 19.8-147.3 59.4-198.9 40.8-51.6 91.2-77.4 151.2-77.4 13.2 0 27.9 1.65 44.1 4.95 16.2 3.3 33 9.45 50.4 18.45 18.6 10.2 33.9 17.25 45.9 21.15 12 3.9 21.3 5.85 27.9 5.85 7.8 0 19.8-1.8 36-5.4a166.088 166.088 0 0 0 48.6-19.8 366.113 366.113 0 0 1 45-21.6c12.6-4.8 25.5-7.2 38.7-7.2 42 0 79.8 11.4 113.4 34.2 18 12 36.3 29.7 54.9 53.1-27.6 24-47.7 45-60.3 63-23.4 33.6-35.1 70.2-35.1 109.8 0 43.8 12.3 83.4 36.9 118.8zM616.4 235.7c-21 19.8-40.2 32.7-57.6 38.7-6 1.8-13.65 3.45-22.95 4.95-9.3 1.5-19.95 2.85-31.95 4.05 0.6-52.8 14.4-98.4 41.4-136.8 27-38.4 71.4-64.8 133.2-79.2 1.2 6 2.1 10.2 2.7 12.6v9.9c0 21.6-5.1 45.9-15.3 72.9a221.625 221.625 0 0 1-49.5 72.9z\" ></path></symbol><symbol id=\"authing-google\" viewBox=\"0 0 1024 1024\"><path d=\"M1000 523.6c0 283-193.8 484.4-480 484.4-274.4 0-496-221.6-496-496S245.6 16 520 16c133.6 0 246 49 332.6 129.8l-135 129.8c-176.6-170.4-505-42.4-505 236.4 0 173 138.2 313.2 307.4 313.2 196.4 0 270-140.8 281.6-213.8H520V440.8h472.2c4.6 25.4 7.8 49.8 7.8 82.8z\" ></path></symbol><symbol id=\"authing-dingtalk\" viewBox=\"0 0 1024 1024\"><path d=\"M905.857912 382.800144a192.415957 192.415957 0 0 1-12.101998 31.649993h0.186l-0.744 1.257c-35.140992 76.657983-126.881972 226.998949-126.881971 226.998949s-0.093-0.373-0.466-0.93l-26.856994 47.567989h129.301971L621.375975 1024l56.039988-227.649949H575.715986l35.326992-150.525966a1436.834677 1436.834677 0 0 0-102.397977 29.789993s-54.130988 32.393993-155.923965-62.137986c0 0-68.699985-61.672986-28.857994-77.079982 16.941996-6.560999 82.197982-14.892997 133.53597-21.967996 69.444984-9.494998 112.172975-14.614997 112.172975-14.614996s-214.106952 3.257999-264.83994-4.886999c-50.732989-8.099998-115.104974-94.484979-128.834972-170.353962 0 0-21.223995-41.702991 45.65999-21.968995 66.838985 19.734996 343.499923 76.799983 343.499923 76.799983S205.267069 266.95017 181.250074 239.487176c-23.922995-27.459994-70.374984-149.732966-64.324985-224.901949 0 0 2.606999-18.757996 21.457995-13.729997 0 0 266.00294 123.946972 447.852899 191.762957 181.896959 67.815985 340.009924 102.398977 319.622929 190.181957z\" ></path></symbol><symbol id=\"authing-apple\" viewBox=\"0 0 1024 1024\"><path d=\"M797.3 656c24.6 34.8 52.8 57.3 84.6 67.5-13.8 42.6-35.7 87-65.7 133.2-46.2 69.6-91.8 104.4-136.8 104.4-16.8 0-41.7-5.7-74.7-17.1-30.6-11.4-57.3-17.1-80.1-17.1-22.8 0-48 6-75.6 18-28.8 11.4-52.5 17.1-71.1 17.1-54 0-107.1-45.9-159.3-137.7-52.2-90.6-78.3-179.7-78.3-267.3 0-81 19.8-147.3 59.4-198.9 40.8-51.6 91.2-77.4 151.2-77.4 13.2 0 27.9 1.65 44.1 4.95 16.2 3.3 33 9.45 50.4 18.45 18.6 10.2 33.9 17.25 45.9 21.15 12 3.9 21.3 5.85 27.9 5.85 7.8 0 19.8-1.8 36-5.4a166.088 166.088 0 0 0 48.6-19.8 366.113 366.113 0 0 1 45-21.6c12.6-4.8 25.5-7.2 38.7-7.2 42 0 79.8 11.4 113.4 34.2 18 12 36.3 29.7 54.9 53.1-27.6 24-47.7 45-60.3 63-23.4 33.6-35.1 70.2-35.1 109.8 0 43.8 12.3 83.4 36.9 118.8zM616.4 235.7c-21 19.8-40.2 32.7-57.6 38.7-6 1.8-13.65 3.45-22.95 4.95-9.3 1.5-19.95 2.85-31.95 4.05 0.6-52.8 14.4-98.4 41.4-136.8 27-38.4 71.4-64.8 133.2-79.2 1.2 6 2.1 10.2 2.7 12.6v9.9c0 21.6-5.1 45.9-15.3 72.9a221.625 221.625 0 0 1-49.5 72.9z\" ></path></symbol><symbol id=\"authing-alipay-web\" viewBox=\"0 0 1024 1024\"><path d=\"M427.154 210.262l-1.819 59.431H185.792v45.481h242.573v78.84H228.24v43.057l203.153-1.823 203.76-1.818-3.641 14.553c-9.094 35.177-47.907 129.173-55.183 132.196-4.244 1.216-33.961-5.458-67.316-15.16-101.276-30.924-151.61-40.023-220.136-40.023-69.74 0.603-115.217 13.342-158.886 44.27-84.897 60.647-91.57 179.506-12.735 245.602 83.687 70.348 220.739 77.017 345.06 16.375 44.267-21.225 123.71-78.84 150.39-108.553l10.922-12.736 34.57 16.98c34.568 17.586 248.03 116.437 284.413 131.598l19.403 8.49V711.17l-52.762-13.95c-47.907-12.74-170.406-50.94-209.826-66.105l-15.16-6.066 20.012-41.238c21.231-42.444 63.68-162.522 63.68-180.108 0-8.491-12.128-9.702-106.128-9.702H555.71v-78.827h254.704v-40.022c0-1.817-57.614-3.032-127.353-2.425l-127.347 0.602V151.437H428.967l-1.813 58.825z m-23.657 395.392c31.535 10.922 73.382 27.896 92.786 38.206l35.167 18.805-19.404 24.255c-10.913 13.342-35.775 36.387-56.399 51.548-69.133 51.542-133.41 71.553-215.887 66.703-86.112-4.852-132.201-40.023-137.66-105.517-3.64-40.63 5.459-63.675 33.359-84.901 35.172-26.685 63.67-32.742 141.296-30.924 59.431 1.814 78.232 5.449 126.742 21.825z\" ></path></symbol><symbol id=\"authing-wechat-miniprogram-app-launch\" viewBox=\"0 0 1126 1024\"><path d=\"M961.876 262.606C900.851 134.702 747.238 80.676 619.77 141.425c-69.45 33.34-113.232 90.332-130.04 168.839-15.583 71.308-6.328 150.685 2.926 211.869 12.22 78.071 12.656 135.459 1.7 176.393-9.69 36.306-29.464 59.957-61.46 75.54a135.814 135.814 0 0 1-104.372 5.102 137.634 137.634 0 0 1-77.835-69.647 136.764 136.764 0 0 1 64.388-181.93c14.317-7.12 25.668-19.38 30.73-34.607 5.023-15.187 4.628-31.244-2.136-45.996a60.511 60.511 0 0 0-34.487-30.81 61.54 61.54 0 0 0-45.878 2.136 256.284 256.284 0 0 0-131.86 145.98 257.233 257.233 0 0 0 10.284 196.72 256.403 256.403 0 0 0 231.802 146.494 263.007 263.007 0 0 0 110.265-24.916c69.41-33.341 113.192-89.462 130.04-167.97 15.149-70.913 6.328-150.29-2.966-210.603-12.22-78.942-12.656-136.764-1.701-177.698 9.69-36.307 29.465-60.354 62.292-75.54a136.962 136.962 0 0 1 182.205 64.585 136.764 136.764 0 0 1-64.387 181.93 60.511 60.511 0 0 0-28.16 80.167c6.724 14.753 19.34 25.708 34.053 30.81 15.148 5.063 31.166 4.628 45.877-2.135 127.51-62.45 181.378-216.101 120.786-343.531z\" ></path></symbol><symbol id=\"authing-qq\" viewBox=\"0 0 1024 1024\"><path d=\"M821.295 699.385a275.463 275.463 0 0 1-57.3 90.76c54.54 16.634 41.202 45.496 41.202 45.496 24.223 13.299 22.69 99.729-111.381 98.195-89.38-0.996-127.248-26.062-142.695-42.735-11.498 1.15-23.035 1.802-34.61 1.84-14.296 0-28.286-1.073-42.084-2.645-14.91 16.634-52.586 42.544-143.308 43.54-133.879 1.534-135.412-84.895-111.15-98.195 0 0-14.642-31.046 47.142-47.335a272.511 272.511 0 0 1-58.794-98.311c-56.035 99.537-83.057 33.575-79.033-42.66 3.604-67.687 63.241-144.61 78.726-163.43a60.98 60.98 0 0 1-4.6-22.804c0-16.482 6.593-31.506 17.363-42.775a44.844 44.844 0 0 1 20.045-46.223c-0.076-2.414-0.306-4.753-0.306-7.206 0-151.394 123.569-274.235 275.96-274.235 152.469 0 275.961 122.802 275.961 274.235 0 4.6-0.268 9.122-0.498 13.645 10.425 10.617 14.947 25.68 11.998 40.283 10.616 11.192 17.36 25.871 17.36 42.276 0 8.125-1.723 15.829-4.598 22.997 15.56 19.163 74.816 96.01 78.38 163.698 3.91 74.164-21.31 138.67-73.78 51.589z\" ></path></symbol><symbol id=\"authing-wechat-mobile\" viewBox=\"0 0 1239 1024\"><path d=\"M745.256 511.245c-21.665 0-43.385 20.373-43.385 45.595 0 20.373 21.72 40.96 43.385 40.96 32.553 0 55.835-20.587 55.835-40.96 0-25.222-23.282-45.595-55.835-45.595M602.705 298.9c34.115 0 55.78-22.097 55.78-55.08 0-34.655-21.665-55.027-55.78-55.027-32.499 0-63.488 20.372-63.488 54.973 0 33.091 30.99 55.08 63.488 55.08M440.05 756.574c-57.344 0-99.167-9.431-153.439-25.169l-156.456 80.196 44.948-135.222C65.051 597.747 0 498.58 0 377.479 0 163.57 198.333 0 440.05 0c213.8 0 404.427 128.97 441.56 311.458a211.106 211.106 0 0 0-41.822-4.743c-210.729 0-373.383 160.498-373.383 353.927 0 33.037 4.635 62.895 12.396 94.37-12.396 1.616-26.409 1.616-38.804 1.616m646.198 154.14L1117.13 1024l-117.76-67.638c-44.894 9.378-88.28 23.606-133.228 23.606-207.656 0-371.873-144.761-371.873-324.07 0-179.253 164.217-323.96 371.873-323.96 196.77 0 373.437 144.707 373.437 323.907 0 100.783-66.614 190.356-153.384 254.922M295.882 188.793c-32.498 0-66.614 20.372-66.614 54.973 0 33.091 34.116 55.08 66.614 55.08 30.99 0 55.781-21.989 55.781-55.026 0-34.655-24.791-55.027-55.78-55.027m692.6 322.452c-23.228 0-43.385 20.373-43.385 45.595 0 20.373 20.157 40.96 43.385 40.96 30.99 0 54.272-20.587 54.272-40.96 0-25.222-23.282-45.595-54.272-45.595\" ></path></symbol><symbol id=\"authing-baidu\" viewBox=\"0 0 1024 1024\"><path d=\"M204.8 537.876c104.422-22.429 90.196-147.185 86.967-174.501-5.149-42.066-54.545-115.55-121.658-109.746-84.48 7.593-96.873 129.6-96.873 129.6C61.891 439.695 100.64 560.262 204.8 537.876zM315.636 754.75c-3.141 8.858-9.861 31.244-4.058 50.75 11.607 43.766 49.658 45.774 49.658 45.774h54.677V717.658H357.44c-26.27 7.855-39.01 28.407-41.847 37.091z m82.779-426.022c57.774 0 104.29-66.37 104.29-148.407C502.705 98.327 456.19 32 398.415 32c-57.47 0-104.16 66.37-104.16 148.32 0 82.036 46.69 148.364 104.29 148.364z m248.334 9.731c77.062 10.037 126.676-72.262 136.407-134.618 10.037-62.138-39.665-134.53-94.21-146.924-54.633-12.523-122.88 75.055-129.077 132.131-7.418 69.818 9.95 139.462 86.88 149.411zM835.564 704.83s-119.259-92.247-188.815-191.913c-94.254-147.01-228.349-87.185-273.164-12.48-44.64 74.75-114.196 122.095-124.014 134.531-10.036 12.393-144 84.655-114.327 216.742 29.76 132 134.269 129.6 134.269 129.6s76.974 7.55 166.342-12.393c89.323-19.898 166.21 4.975 166.21 4.975s208.67 69.818 265.746-64.713C924.8 774.56 835.564 704.83 835.564 704.83zM478.487 905.076H342.865c-58.56-11.738-81.905-51.665-84.916-58.472-2.924-6.982-19.505-39.142-10.69-93.819 25.308-81.905 97.483-87.796 97.483-87.796h72.218v-88.844l61.484 0.96 0.087 327.928z m252.742-0.96H575.011c-60.524-15.534-63.316-58.56-63.316-58.56V672.844l63.36-1.004v155.127c3.84 16.495 24.436 19.637 24.436 19.637h64.32v-173.76h67.418v231.272z m220.975-461.018c0-29.847-24.742-119.65-116.64-119.65-92.073 0-104.335 84.741-104.335 144.654 0 57.163 4.887 137.062 119.127 134.443 114.415-2.443 101.848-129.469 101.848-159.447z\" ></path></symbol><symbol id=\"authing-wechat-pc\" viewBox=\"0 0 1239 1024\"><path d=\"M727.677 511.336c-19.042 0-38.132 17.906-38.132 40.074 0 17.906 19.09 36 38.132 36 28.61 0 49.074-18.094 49.074-36 0-22.168-20.463-40.074-49.074-40.074m-125.29-186.63c29.985 0 49.026-19.422 49.026-48.411 0-30.459-19.041-48.364-49.025-48.364-28.564 0-55.8 17.905-55.8 48.316 0 29.084 27.237 48.41 55.8 48.41m-142.959 402.3c-50.4 0-87.158-8.288-134.858-22.12L187.06 775.32l39.505-118.847c-96.726-69.11-153.9-156.269-153.9-262.705C72.667 205.763 246.984 62 459.43 62c187.91 0 355.454 113.353 388.09 273.742a185.542 185.542 0 0 0-36.757-4.168c-185.211 0-328.17 141.062-328.17 311.068 0 29.037 4.075 55.28 10.896 82.943-10.895 1.42-23.211 1.42-34.105 1.42M1027.33 862.48l27.19 99.52-103.5-59.447c-39.458 8.242-77.59 20.747-117.096 20.747-182.51 0-326.841-127.231-326.841-284.827 0-157.547 144.331-284.73 326.841-284.73 172.943 0 328.216 127.183 328.216 284.683 0 88.58-58.547 167.305-134.81 224.053M332.72 227.93c-28.563 0-58.548 17.905-58.548 48.316 0 29.084 29.985 48.41 58.547 48.41 27.238 0 49.026-19.326 49.026-48.362 0-30.459-21.788-48.364-49.025-48.364m608.73 283.405c-20.415 0-38.13 17.906-38.13 40.074 0 17.906 17.715 36 38.13 36 27.238 0 47.7-18.094 47.7-36 0-22.168-20.462-40.074-47.7-40.074\" ></path></symbol><symbol id=\"authing-wechat-miniprogram-qrconnec\" viewBox=\"0 0 1126 1024\"><path d=\"M961.876 262.606C900.851 134.702 747.238 80.676 619.77 141.425c-69.45 33.34-113.232 90.332-130.04 168.839-15.583 71.308-6.328 150.685 2.926 211.869 12.22 78.071 12.656 135.459 1.7 176.393-9.69 36.306-29.464 59.957-61.46 75.54a135.814 135.814 0 0 1-104.372 5.102 137.634 137.634 0 0 1-77.835-69.647 136.764 136.764 0 0 1 64.388-181.93c14.317-7.12 25.668-19.38 30.73-34.607 5.023-15.187 4.628-31.244-2.136-45.996a60.511 60.511 0 0 0-34.487-30.81 61.54 61.54 0 0 0-45.878 2.136 256.284 256.284 0 0 0-131.86 145.98 257.233 257.233 0 0 0 10.284 196.72 256.403 256.403 0 0 0 231.802 146.494 263.007 263.007 0 0 0 110.265-24.916c69.41-33.341 113.192-89.462 130.04-167.97 15.149-70.913 6.328-150.29-2.966-210.603-12.22-78.942-12.656-136.764-1.701-177.698 9.69-36.307 29.465-60.354 62.292-75.54a136.962 136.962 0 0 1 182.205 64.585 136.764 136.764 0 0 1-64.387 181.93 60.511 60.511 0 0 0-28.16 80.167c6.724 14.753 19.34 25.708 34.053 30.81 15.148 5.063 31.166 4.628 45.877-2.135 127.51-62.45 181.378-216.101 120.786-343.531z\" ></path></symbol><symbol id=\"authing-wechat-webpage-authorization\" viewBox=\"0 0 1188 1024\"><path d=\"M512 1.896C229.452 1.896 0 229.452 0 512s229.452 510.104 512 510.104S1022.104 794.548 1022.104 512 794.548 1.896 512 1.896z m-91.022 629.57c-26.548 0-49.304-5.688-75.852-11.377l-75.852 37.926 22.756-66.37c-54.993-37.926-87.23-87.23-87.23-147.912 0-104.296 98.607-185.837 218.074-185.837 108.089 0 201.007 64.474 219.97 153.6-7.585 0-13.274-1.896-20.859-1.896-104.296 0-185.837 77.748-185.837 172.563 0 15.17 1.896 30.34 7.585 45.511-7.585 3.793-15.17 3.793-22.755 3.793z m322.37 77.749l17.067 54.992-58.785-34.133c-22.756 5.689-43.615 11.378-66.37 11.378-104.297 0-185.838-70.163-185.838-157.393S530.963 424.77 635.26 424.77c98.608 0 185.837 70.163 185.837 159.29 0 47.407-32.237 91.021-77.748 125.155z\" fill=\"#46BB36\" ></path><path d=\"M318.578 379.26c0 17.066 13.274 30.34 30.34 30.34s30.341-13.274 30.341-30.34-13.274-30.341-30.34-30.341-30.341 13.274-30.341 30.34z m235.14 159.288c0 13.274 11.378 24.652 24.652 24.652 13.274 0 24.652-11.378 24.652-24.652 0-13.274-11.378-24.652-24.652-24.652-13.274-1.896-24.651 9.482-24.651 24.652z m-81.54-159.289c0 17.067 13.274 30.341 30.34 30.341 17.067 0 30.341-13.274 30.341-30.34 0-17.067-13.274-30.341-30.34-30.341-17.067 0-30.341 13.274-30.341 30.34zM675.08 538.55c0 13.273 11.378 24.651 24.652 24.651 13.274 0 24.652-11.378 24.652-24.652 0-13.274-11.378-24.652-24.652-24.652-13.274-1.896-24.652 9.482-24.652 24.652z\" fill=\"#46BB36\" ></path></symbol><symbol id=\"authing-wechat-miniprogram-default\" viewBox=\"0 0 1126 1024\"><path d=\"M961.876 262.606C900.851 134.702 747.238 80.676 619.77 141.425c-69.45 33.34-113.232 90.332-130.04 168.839-15.583 71.308-6.328 150.685 2.926 211.869 12.22 78.071 12.656 135.459 1.7 176.393-9.69 36.306-29.464 59.957-61.46 75.54a135.814 135.814 0 0 1-104.372 5.102 137.634 137.634 0 0 1-77.835-69.647 136.764 136.764 0 0 1 64.388-181.93c14.317-7.12 25.668-19.38 30.73-34.607 5.023-15.187 4.628-31.244-2.136-45.996a60.511 60.511 0 0 0-34.487-30.81 61.54 61.54 0 0 0-45.878 2.136 256.284 256.284 0 0 0-131.86 145.98 257.233 257.233 0 0 0 10.284 196.72 256.403 256.403 0 0 0 231.802 146.494 263.007 263.007 0 0 0 110.265-24.916c69.41-33.341 113.192-89.462 130.04-167.97 15.149-70.913 6.328-150.29-2.966-210.603-12.22-78.942-12.656-136.764-1.701-177.698 9.69-36.307 29.465-60.354 62.292-75.54a136.962 136.962 0 0 1 182.205 64.585 136.764 136.764 0 0 1-64.387 181.93 60.511 60.511 0 0 0-28.16 80.167c6.724 14.753 19.34 25.708 34.053 30.81 15.148 5.063 31.166 4.628 45.877-2.135 127.51-62.45 181.378-216.101 120.786-343.531z\" ></path></symbol><symbol id=\"authing-wechatwork-service-provider-authorization\" viewBox=\"0 0 1182 1024\"><path d=\"M993.598 913.02a7.062 7.062 0 0 1 4.908 2.224c15.678 17.761 37.252 31.073 59.816 35.505 15.713 3.354 26.482 18.873 26.482 36.634 0 19.968-14.706 36.617-32.362 36.617-16.666 0-30.402-14.424-32.361-32.185-4.909-25.53-15.714-47.722-30.42-65.466-0.971-1.112-1.942-3.337-2.931-5.561 0-4.432 2.93-7.768 6.868-7.768zM1024 0a105.931 105.931 0 0 1 105.931 105.949v453.42h-70.62V247.172H70.46v670.88h452.026v70.638H32.84C15.572 988.69 0.829 975.448 0 958.27v-857.9C2.79 44.19 49.346 0.053 105.843 0zM812.138 512c136.651 0 247.172 97.774 247.172 219.224h-60.804c0-101.888-85.663-162.286-182.22-163.045-117.565-0.918-189.686 76.182-193.553 157.184-2.471 51.412 16.42 92.495 61.617 127.47 5.032 4.131 4.184 17.479 3.178 23.658l-2.684 37.34s1.006 0 2.013-1.023l49.982-25.141a16.455 16.455 0 0 1 12.058-1.042c22.104 6.18 37.676 5.509 60.787 5.509 24.117 0 46.857-2.066 64.23-8.087l15.589 55.085a288.662 288.662 0 0 1-78.371 11.317c-25.124 0-49.24-3.09-72.334-9.27l-53.265 26.766c-5.014 2.065-12.059 3.09-18.08 3.09-6.037 0-12.058-2.066-17.09-5.138-10.045-7.221-15.06-19.562-14.053-34.993v-1.041l5.014-42.196c-49.222-40.148-76.358-97.775-76.358-157.484C564.966 609.792 675.486 512 812.138 512z m338.397 330.399c17.655 0 32.362 16.649 32.362 36.634 0 18.856-12.747 34.393-28.443 36.617-22.563 5.544-42.178 17.761-57.874 34.41a21.186 21.186 0 0 1-4.908 3.32c-3.92 0-6.868-3.32-6.868-7.769 0-2.225 0.99-4.431 1.978-5.544 15.678-17.76 27.454-42.178 31.373-67.707 2.948-17.744 16.684-29.961 32.38-29.961z m-141.242-30.261c3.92 0 6.868 3.337 6.868 7.768a9.075 9.075 0 0 1-1.977 5.544c-15.678 17.761-27.454 42.178-31.374 67.708-2.948 17.743-16.684 29.96-32.38 29.96-17.654 0-32.361-16.648-32.361-36.634 0-18.856 12.747-34.392 28.442-36.617 22.564-5.544 42.179-17.743 57.874-34.392 0.971-1.113 2.93-2.225 4.908-3.337z m39.23-70.62c16.667 0 30.402 14.424 32.362 32.185 4.908 25.511 15.713 47.722 30.42 65.465 1.942 1.112 1.942 3.337 2.93 5.561 0 4.432-2.93 7.769-6.867 7.769a7.062 7.062 0 0 1-4.908-2.225c-15.696-17.761-37.253-31.073-59.816-35.504-15.713-3.355-26.483-18.874-26.483-36.635 0-19.968 14.707-36.617 32.362-36.617zM511.912 70.584a53.177 53.177 0 0 0-37.5 15.537 53 53 0 0 0 17.426 86.422 53.407 53.407 0 0 0 58.05-11.582 52.824 52.824 0 0 0 11.388-57.838 53.23 53.23 0 0 0-49.364-32.539z m-176.605 0a53.177 53.177 0 0 0-37.5 15.537 53 53 0 0 0 17.426 86.422 53.407 53.407 0 0 0 58.05-11.582 52.824 52.824 0 0 0 11.388-57.838 53.23 53.23 0 0 0-49.364-32.539z m-176.499 0a53.177 53.177 0 0 0-37.5 15.537 53 53 0 0 0 17.426 86.422 53.407 53.407 0 0 0 58.05-11.582 52.824 52.824 0 0 0 11.388-57.838 53.23 53.23 0 0 0-49.364-32.539z\" ></path></symbol><symbol id=\"authing-wechatwork-corp-qrconnect\" viewBox=\"0 0 1220 1024\"><path d=\"M1077.17 663.237c-29.54-34.659-51.2-77.982-61.047-127.803-3.938-34.659-31.508-62.819-64.985-62.819-35.446 0-64.984 32.493-64.984 71.483 0 34.659 21.661 64.985 53.17 71.484 45.291 8.664 88.614 34.658 120.122 69.316 1.97 2.167 5.908 4.333 9.846 4.333 7.877 0 13.785-6.499 13.785-15.163-1.97-4.333-1.97-8.665-5.908-10.831z m-194.955-26.782c1.97-2.166 3.939-6.498 3.939-10.83 0-8.665-5.908-15.163-13.785-15.163-3.938 2.166-7.877 4.332-9.846 6.498-31.508 32.492-70.892 56.32-116.185 67.15-31.507 4.333-57.107 34.66-57.107 71.484 0 38.99 29.538 71.483 64.984 71.483 31.508 0 59.077-23.828 64.985-58.486 7.877-49.822 31.508-97.477 63.015-132.136z m165.416 243.2c31.507-32.492 70.892-56.32 116.184-67.15 31.508-4.333 57.108-34.659 57.108-71.483 0-38.991-29.538-71.484-64.985-71.484-31.507 0-59.076 23.828-64.984 58.487-7.877 49.821-31.508 97.477-63.016 132.135-1.969 2.166-3.938 6.498-3.938 10.83 0 8.665 5.908 15.164 13.785 15.164 3.938-2.166 7.877-4.332 9.846-6.499z m-76.8 1.379c-45.293-8.665-88.616-34.659-120.123-69.317a14.375 14.375 0 0 0-9.846-4.332c-7.877 0-13.785 6.498-13.785 15.163 1.97 4.332 3.938 8.664 5.908 10.83 29.538 34.659 51.2 77.982 61.046 127.804 3.938 34.658 31.507 62.818 64.984 62.818 35.447 0 64.985-32.492 64.985-71.483 0-34.659-21.662-64.985-53.17-71.483z\" ></path><path d=\"M243.554 810.2s2.048 0 4.096-2.067l101.534-50.708c8.172-4.135 16.345-4.135 24.497-2.067 44.899 12.445 76.544 11.106 123.49 11.106 48.995 0 95.174-4.155 130.502-16.325l31.665 111.065c-51.043 14.533-106.142 22.843-159.232 22.843a571.077 571.077 0 0 1-146.964-18.688l-108.19 53.957c-10.2 4.135-24.497 6.222-36.745 6.222-12.249 0-24.497-4.135-34.698-10.377-20.421-14.514-30.622-39.424-28.574-70.558v-2.068l10.201-85.07C55.099 676.51 0 560.285 0 439.926 0 197.12 224.551 0 502.154 0c277.622 0 502.154 197.14 502.154 442.014h-123.55c0-205.43-174.001-327.208-370.196-328.744-238.808-1.85-385.378 153.6-393.216 316.948-4.982 103.62 33.36 186.466 125.224 257.024 10.2 8.31 8.468 35.19 6.44 47.655\" ></path></symbol><symbol id=\"authing-wechatwork-service-provider-qrconnect\" viewBox=\"0 0 1220 1024\"><path d=\"M1077.17 663.237c-29.54-34.659-51.2-77.982-61.047-127.803-3.938-34.659-31.508-62.819-64.985-62.819-35.446 0-64.984 32.493-64.984 71.483 0 34.659 21.661 64.985 53.17 71.484 45.291 8.664 88.614 34.658 120.122 69.316 1.97 2.167 5.908 4.333 9.846 4.333 7.877 0 13.785-6.499 13.785-15.163-1.97-4.333-1.97-8.665-5.908-10.831z m-194.955-26.782c1.97-2.166 3.939-6.498 3.939-10.83 0-8.665-5.908-15.163-13.785-15.163-3.938 2.166-7.877 4.332-9.846 6.498-31.508 32.492-70.892 56.32-116.185 67.15-31.507 4.333-57.107 34.66-57.107 71.484 0 38.99 29.538 71.483 64.984 71.483 31.508 0 59.077-23.828 64.985-58.486 7.877-49.822 31.508-97.477 63.015-132.136z m165.416 243.2c31.507-32.492 70.892-56.32 116.184-67.15 31.508-4.333 57.108-34.659 57.108-71.483 0-38.991-29.538-71.484-64.985-71.484-31.507 0-59.076 23.828-64.984 58.487-7.877 49.821-31.508 97.477-63.016 132.135-1.969 2.166-3.938 6.498-3.938 10.83 0 8.665 5.908 15.164 13.785 15.164 3.938-2.166 7.877-4.332 9.846-6.499z m-76.8 1.379c-45.293-8.665-88.616-34.659-120.123-69.317a14.375 14.375 0 0 0-9.846-4.332c-7.877 0-13.785 6.498-13.785 15.163 1.97 4.332 3.938 8.664 5.908 10.83 29.538 34.659 51.2 77.982 61.046 127.804 3.938 34.658 31.507 62.818 64.984 62.818 35.447 0 64.985-32.492 64.985-71.483 0-34.659-21.662-64.985-53.17-71.483z\" ></path><path d=\"M243.554 810.2s2.048 0 4.096-2.067l101.534-50.708c8.172-4.135 16.345-4.135 24.497-2.067 44.899 12.445 76.544 11.106 123.49 11.106 48.995 0 95.174-4.155 130.502-16.325l31.665 111.065c-51.043 14.533-106.142 22.843-159.232 22.843a571.077 571.077 0 0 1-146.964-18.688l-108.19 53.957c-10.2 4.135-24.497 6.222-36.745 6.222-12.249 0-24.497-4.135-34.698-10.377-20.421-14.514-30.622-39.424-28.574-70.558v-2.068l10.201-85.07C55.099 676.51 0 560.285 0 439.926 0 197.12 224.551 0 502.154 0c277.622 0 502.154 197.14 502.154 442.014h-123.55c0-205.43-174.001-327.208-370.196-328.744-238.808-1.85-385.378 153.6-393.216 316.948-4.982 103.62 33.36 186.466 125.224 257.024 10.2 8.31 8.468 35.19 6.44 47.655\" ></path></symbol><symbol id=\"authing-weibo\" viewBox=\"0 0 1185 1024\"><path d=\"M891.75 466.973c-17.137-5.012-29.37-7.545-19.616-30.019 19.616-47.477 19.616-90 0-120.017-39.18-57.503-144.538-54.97-264.61-2.48 0 0-39.125 17.517-29.37-12.502 19.615-59.982 17.19-109.992-12.234-140.01-66.127-67.473-240.089 2.532-389.532 154.992C63.7 431.942 0 551.96 0 656.996c0 199.94 252.322 322.49 497.314 322.49 323.354 0 536.55-192.503 538.975-347.496 0-92.533-75.934-142.545-144.539-165.017zM499.794 907C303.79 926.941 134.73 836.94 122.497 704.474c-14.714-129.987 134.73-252.484 330.735-272.532 196.005-19.939 365.01 70.06 377.243 202.527 14.712 129.987-134.73 252.484-330.68 272.532z m19.563-375.034c-93.072-25.005-198.43 22.527-240.088 107.515-41.605 87.52 0 182.478 93.125 212.496 97.975 32.497 213.142-17.515 252.322-109.995 39.179-92.53-9.81-185.01-105.359-210.016z m-70.976 219.987c-19.616 30.018-61.22 45-90.645 30.018-29.372-14.982-39.18-50.012-19.617-82.455 19.616-30.07 58.796-42.574 88.22-30.07 29.372 15.034 39.18 50.01 22.042 82.507z m63.7-82.455c-7.329 12.45-22.095 17.461-34.275 12.45-12.287-4.958-17.192-17.462-9.809-29.964 4.85-12.503 19.564-17.515 31.797-12.503 12.288 5.011 17.191 17.515 12.288 29.964z m431.137-327.555a83.964 83.964 0 0 0-14.66-74.963c-19.616-19.994-46.562-30.019-71.029-22.527-22.096 5.012-41.658-9.97-46.563-30.018a40.258 40.258 0 0 1 29.426-47.479c51.412-10.023 107.783 5.012 144.537 47.479a157.904 157.904 0 0 1 31.797 152.514c-7.33 19.994-29.372 32.497-48.988 25.006-19.563-5.012-31.796-27.485-24.466-50.012z m227.908 75.018a44.838 44.838 0 0 1-56.37 30.019c-24.521-7.546-36.755-35.032-29.426-57.504a226.13 226.13 0 0 0-46.508-222.52c-56.372-62.515-137.21-87.52-213.144-70.006a45.108 45.108 0 0 1-53.892-35.029c-4.904-24.952 9.754-49.958 34.276-54.97a312.789 312.789 0 0 1 298.884 97.544c78.413 87.467 98.03 207.485 66.18 312.466z\" ></path></symbol><symbol id=\"authing-github\" viewBox=\"0 0 1024 1024\"><path d=\"M51.57 672.155c3.72-6.605 52.236-29.956 126.057 57.307 0.186 0 0.465 0.14 0.79 0.419 5.21 4.326 29.538 39.26 43.307 51.865 58.935 53.307 147.083 12.001 157.13 6.047 4.652-38.282 19.025-68.378 43.027-90.52a290.072 290.072 0 0 1-64.052-10.047 203.832 203.832 0 0 1-61.029-18.048 168.852 168.852 0 0 1-58.052-29.165c-17.35-9.35-33.677-23.444-49.027-42.237a205.367 205.367 0 0 1-40.004-58.284c-10.698-20.095-19.071-45.911-25.072-77.356-6-28.84-8.977-62.005-8.977-99.543 0-68.983 22.979-129.64 69.076-181.924-2.745-5.395-33.026-77.17 7.907-179.969 55.447-1.954 115.173 23.49 185.226 68.332A925.198 925.198 0 0 1 547.008 46.89c56.936 1.907 113.592 9.303 169.132 22.142C739.49 54.984 821.637-1.3 900.249 2.747c37.678 89.45 11.024 170.154 6.977 178.9 46.05 46.236 69.076 104.846 69.076 175.875v6.047c0.326 5.024 0.512 10.094 0.512 15.118 0 27.77-3.163 55.958-9.536 84.473a349.24 349.24 0 0 1-25.025 77.402 282.816 282.816 0 0 1-39.027 57.26 367.242 367.242 0 0 1-49.028 41.26c-18.42 10.56-37.445 20.002-57.074 28.142a1890.865 1890.865 0 0 1-61.076 18.048 1650.986 1650.986 0 0 0-64.052 10.048c30.05 25.49 45.4 66.982 46.05 124.662a3242.148 3242.148 0 0 0-0.464 55.54c0 19.583 0.186 40.282 0.465 62.052-0.651 21.444-0.93 37.724-0.93 48.795 0 11.07 0.279 16.931 0.93 17.536a677.27 677.27 0 0 1-159.084 20.048h-14.978c-54.424 0-107.452-6.651-159.177-20.14-0.698-0.652-0.977-39.214-0.977-115.546-20.7 4.652-157.037 31.538-217.508-69.913-19.304-30.05-35.351-103.405-100.753-136.152-6.93 18.048-28.84 2.652-14-10.047z\" ></path></symbol></svg>'\n","import { getDefaultLoginConfig, LoginConfig } from '../Login/props'\nimport { getDefaultRegisterConfig, RegisterConfig } from '../Register/props'\n\nexport interface GuardComponentConifg extends Partial<GuardLocalConfig> {}\n\nexport interface GuardLocalConfig extends RegisterConfig, LoginConfig {}\n\nlet defaultConfig: GuardLocalConfig\n\nexport const getDefaultGuardLocalConfig = (): GuardLocalConfig => {\n if (!defaultConfig) {\n defaultConfig = {\n ...getDefaultLoginConfig(),\n ...getDefaultRegisterConfig(),\n }\n }\n\n return defaultConfig\n}\n","import React, { FC } from 'react'\nimport { getClassnames } from '../_utils'\nimport './iconfont'\nimport './style.less'\n\nexport const IconFont: FC<{\n type: string\n style?: React.CSSProperties\n className?: string\n}> = ({ type, style, className }) => {\n return (\n <svg style={{ ...style }} className={getClassnames(['g2-icon', className])}>\n <use xlinkHref={`#${type}`}></use>\n </svg>\n )\n}\n","import { Button, message, Space, Tooltip } from 'antd'\nimport Avatar from 'antd/lib/avatar/avatar'\nimport { Protocol, SocialConnectionProvider } from 'authing-js-sdk'\nimport { Lang } from 'authing-js-sdk/build/main/types'\nimport qs from 'qs'\nimport React, { useEffect } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport shortid from 'shortid'\nimport { i18n } from '../../_utils/locales'\nimport { isWechatBrowser, popupCenter } from '../../_utils'\nimport { useGuardHttp } from '../../_utils/guradHttp'\nimport {\n ApplicationConfig,\n IAzureAdConnectionConfig,\n ICasConnectionConfig,\n IOAuthConnectionConfig,\n ISamlConnectionConfig,\n OIDCConnectionConfig,\n SocialConnectionItem,\n} from '../../AuthingGuard/api'\nimport {\n APP_MFA_CODE,\n HIDE_SOCIALS,\n OTP_MFA_CODE,\n} from '../../AuthingGuard/constants'\nimport { useScreenSize } from '../../AuthingGuard/hooks/useScreenSize'\nimport { useAuthClient } from '../../Guard/authClient'\nimport { IconFont } from '../../IconFont'\nimport { LoginConfig } from '../props'\nimport './style.less'\n\nexport interface SocialLoginProps {\n appId: string\n config: LoginConfig\n onLogin: any\n}\n\nexport const SocialLogin: React.FC<SocialLoginProps> = ({\n appId,\n config,\n onLogin: onGuardLogin,\n}) => {\n const noLoginMethods = !config.loginMethods.length\n\n const userPoolId = config.__publicConfig__?.userPoolId\n\n const publicConfig = config.__publicConfig__\n\n const { t } = useTranslation()\n\n const { post } = useGuardHttp()\n\n const [screenSize] = useScreenSize()\n\n const authClient = useAuthClient()\n\n useEffect(() => {\n const onMessage = (evt: MessageEvent) => {\n // TODO: event.origin是指发送的消息源,一定要进行验证!!!\n\n const { code, message: errMsg, data, event } = evt.data\n\n const { source, eventType } = event || {}\n\n // 社会化登录是用 authing-js-sdk 实现的,不用再在这里回调了\n if (source === 'authing' && eventType === 'socialLogin') {\n return\n }\n\n try {\n const parsedMsg = JSON.parse(errMsg)\n const { code: authingCode } = parsedMsg\n if ([OTP_MFA_CODE, APP_MFA_CODE].includes(authingCode)) {\n // onFail(parsedMsg)\n // TODO\n return\n }\n } catch (e) {\n // do nothing...\n }\n\n if (code !== undefined) {\n if (code === 200) {\n localStorage.setItem('_authing_token', data?.token)\n // onSuccess(data)\n // TODO\n } else {\n message.error(errMsg)\n }\n }\n }\n window.addEventListener('message', onMessage)\n return () => {\n window.removeEventListener('message', onMessage)\n }\n }, [])\n\n let enterpriseConnectionObjs: ApplicationConfig['identityProviders']\n\n if (config.enterpriseConnections) {\n enterpriseConnectionObjs =\n config.__publicConfig__?.identityProviders?.filter?.((item) =>\n config.enterpriseConnections!.includes(item.identifier)\n ) || []\n } else {\n enterpriseConnectionObjs = config.__publicConfig__?.identityProviders || []\n }\n\n const idpButtons = enterpriseConnectionObjs.map((i) => {\n if (i.protocol === Protocol.OIDC) {\n const configItem = i.config as OIDCConnectionConfig\n const state = shortid.generate()\n\n const query = qs.stringify({\n client_id: configItem.clientId,\n redirect_uri: configItem.redirectUri,\n scope: configItem.scopes,\n response_type: configItem.responseType,\n state,\n nonce: shortid.generate(),\n })\n const url = `${configItem.authorizationEdpoint}?${query}`\n\n return (\n <Button\n key={i.identifier}\n className=\"g2-guard-third-login-btn\"\n block\n size=\"large\"\n icon={<Avatar size={20} src={i.logo} style={{ marginRight: 8 }} />}\n onClick={async () => {\n await post('/api/v2/connections/oidc/start-interaction', {\n state,\n protocol: i.protocol,\n userPoolId,\n appId,\n referer: window.location.href,\n connection: { providerIentifier: i.identifier },\n })\n popupCenter(url)\n }}\n >\n {t('login.loginBy', {\n name: i.displayName,\n })}\n </Button>\n )\n } else if (i.protocol === Protocol.SAML) {\n const config = i.config as ISamlConnectionConfig\n return (\n <Button\n key={i.identifier}\n className=\"g2-guard-third-login-btn\"\n block\n size=\"large\"\n icon={<Avatar size={20} src={i.logo} style={{ marginRight: 8 }} />}\n onClick={async () => {\n popupCenter(config.samlRequest!)\n }}\n >\n {t('login.loginBy', {\n name: i.displayName,\n })}\n </Button>\n )\n } else if (i.protocol === Protocol.CAS) {\n const config = i.config as ICasConnectionConfig\n\n return (\n <Button\n key={i.identifier}\n className=\"g2-guard-third-login-btn\"\n block\n size=\"large\"\n icon={<Avatar size={20} src={i.logo} style={{ marginRight: 8 }} />}\n onClick={async () => {\n popupCenter(config.casConnectionLoginUrl!)\n }}\n >\n {t('login.loginBy', {\n name: i.displayName,\n })}\n </Button>\n )\n } else if (i.protocol === Protocol.OAUTH) {\n const config = i.config as IOAuthConnectionConfig\n\n return (\n <Button\n key={i.identifier}\n className=\"g2-guard-third-login-btn\"\n block\n size=\"large\"\n icon={<Avatar size={20} src={i.logo} style={{ marginRight: 8 }} />}\n onClick={async () => {\n popupCenter(config.authUrl!)\n }}\n >\n {t('login.loginBy', {\n name: i.displayName,\n })}\n </Button>\n )\n } else if (i.protocol === Protocol.AZURE_AD) {\n const configItem = i.config as IAzureAdConnectionConfig\n return (\n <Button\n key={i.identifier}\n className=\"g2-guard-third-login-btn\"\n block\n size=\"large\"\n icon={<Avatar size={20} src={i.logo} style={{ marginRight: 8 }} />}\n onClick={async () => {\n popupCenter(configItem.authorizationUrl)\n }}\n >\n {t('login.loginBy', {\n name: i.displayName,\n })}\n </Button>\n )\n } else {\n return null\n }\n })\n\n let socialConnectionObjs: SocialConnectionItem[]\n\n if (!config.socialConnections) {\n socialConnectionObjs = [...(publicConfig?.socialConnections || [])]\n } else {\n const socials = config.socialConnections\n socialConnectionObjs =\n publicConfig?.socialConnections?.filter?.((item) =>\n socials.includes(item.provider)\n ) ?? []\n }\n\n // 某些社会化登录会在 tabs 中显示,或者无法在 Guard 中使用,所以底部不显示了\n socialConnectionObjs = socialConnectionObjs?.filter(\n (item) => !HIDE_SOCIALS.includes(item.provider)\n )\n\n const socialLoginButtons = socialConnectionObjs\n .filter((item) =>\n isWechatBrowser()\n ? item.provider === SocialConnectionProvider.WECHATMP\n : item.provider !== SocialConnectionProvider.WECHATMP\n )\n .map((item) => {\n const iconType = `authing-${item.provider.replace(/:/g, '-')}`\n\n const authorization_params: Record<string, any> = {}\n if (item.provider === SocialConnectionProvider.BAIDU) {\n authorization_params.display = screenSize\n }\n\n const onLogin = () => {\n authClient.social.authorize(item.provider, {\n onSuccess(user) {\n // TODO\n // onSuccess(user)\n onGuardLogin(200, user)\n },\n onError(code, msg) {\n try {\n const parsedMsg = JSON.parse(msg)\n const {\n code: authingCode,\n message: authingMessage,\n data: authingData,\n } = parsedMsg\n // if ([OTP_MFA_CODE, APP_MFA_CODE].includes(authingCode)) {\n // // TODO\n // onGuardLogin(authingCode, authingData, authingMessage)\n // return\n // }\n onGuardLogin(authingCode, authingData, authingMessage)\n } catch (e) {\n // do nothing...\n }\n\n message.error(msg)\n },\n authorization_params,\n })\n }\n\n const shape = config.socialConnectionsBtnShape\n\n if (shape === 'button') {\n return (\n <Button\n key={item.provider}\n block\n size=\"large\"\n className=\"g2-guard-third-login-btn\"\n icon={\n <IconFont\n type={`${iconType}-fill`}\n style={{ fontSize: 20, marginRight: 8 }}\n />\n }\n onClick={onLogin}\n style={{\n marginBottom: 8,\n }}\n >\n {i18n.language === 'zh-CN'\n ? item.name\n : item.name_en ?? item.provider}\n </Button>\n )\n } else if (shape === 'icon') {\n return (\n <Tooltip\n key={item.provider}\n title={item.tooltip?.[i18n.language as Lang] || item.name}\n >\n <div className=\"g2-social-login-item\" onClick={onLogin}>\n <IconFont type={`${iconType}-fill`} />\n </div>\n </Tooltip>\n )\n } else {\n return noLoginMethods ? (\n <Button\n key={item.provider}\n block\n size=\"large\"\n className=\"g2-guard-third-login-btn\"\n icon={\n <IconFont\n type={`${iconType}-fill`}\n style={{ fontSize: 20, marginRight: 8 }}\n />\n }\n onClick={onLogin}\n >\n {i18n.language === 'zh-CN'\n ? item.name\n : item.name_en ?? item.provider}\n </Button>\n ) : (\n <Tooltip\n key={item.provider}\n title={item.tooltip?.[i18n.language as Lang] || item.name}\n >\n <div className=\"g2-social-login-item\" onClick={onLogin}>\n <IconFont type={`${iconType}-fill`} />\n </div>\n </Tooltip>\n )\n }\n })\n const idp =\n enterpriseConnectionObjs.length > 0 ? (\n <>\n {!noLoginMethods && <div className=\"g2-social-login-title\">OR</div>}\n <div className=\"g2-social-login-list\">{idpButtons}</div>\n </>\n ) : null\n\n // let socialLogin\n // const shape = config.socialConnectionsBtnShape\n\n const socialLogin =\n socialLoginButtons.length > 0 && noLoginMethods ? (\n <Space\n size={12}\n className=\"g2-guard-full-width-space no-login-methods\"\n direction=\"vertical\"\n >\n {socialLoginButtons}\n </Space>\n ) : (\n socialLoginButtons.length > 0 && (\n <>\n <div className=\"g2-social-login-title\">\n {t('login.thridAccLogin')}\n </div>\n <div className=\"g2-social-login-list\">{socialLoginButtons}</div>\n </>\n )\n )\n\n return (\n <>\n {!noLoginMethods && (\n <div\n style={{\n flex: 1,\n minHeight: 47,\n }}\n />\n )}\n <Space\n size={12}\n direction=\"vertical\"\n className=\"g2-guard-full-width-space\"\n >\n {idp}\n {socialLogin}\n </Space>\n </>\n )\n}\n","import React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { IconFont } from '../IconFont'\nimport { changeLang } from '../_utils/locales'\n\nexport const ChangeLanguage = (props: any) => {\n const { i18n } = useTranslation()\n if (props.langRange.length <= 1) {\n return <></>\n }\n\n let switchText = '简体中文'\n if (i18n.language === 'en-US') {\n switchText = 'English'\n }\n return (\n <div className=\"g2-change-language-container\">\n <span\n className=\"g2-change-language-button\"\n onClick={() => {\n if (i18n.language === 'zh-CN') {\n changeLang('en-US')\n props.onLangChange?.('en-US')\n } else if (i18n.language === 'en-US') {\n changeLang('zh-CN')\n props.onLangChange?.('zh-CN')\n }\n }}\n >\n <IconFont type=\"authing-global-line\" />\n <span className=\"g2-change-language-text\">{switchText}</span>\n </span>\n </div>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { message, Tabs } from 'antd'\nimport { intersection } from 'lodash'\n\nimport { LoginWithPassword } from './core/withPassword/index'\nimport { LoginWithPhoneCode } from './core/withPhonecode'\nimport { LoginWithLDAP } from './core/withLDAP'\nimport { LoginWithAD } from './core/withAD'\nimport { LoginWithAppQrcode } from './core/withAppQrcode'\nimport { LoginWithWechatMiniQrcode } from './core/withWechatMiniQrcode'\nimport { LoginWithWechatmpQrcode } from './core/withWechatmpQrcode'\nimport { codeMap } from './codemap'\nimport { SocialLogin } from './socialLogin'\nimport { GuardLoginViewProps } from './props'\n\nimport { useAuthClient } from '../Guard/authClient'\nimport { GuardModuleType } from '../Guard/module'\nimport { LoginMethods } from '../AuthingGuard/types'\nimport { IconFont } from '../IconFont'\nimport { ChangeLanguage } from '../ChangeLanguage'\nimport { i18n } from '../_utils/locales'\n\nimport './styles.less'\n\nconst inputWays = [\n LoginMethods.Password,\n LoginMethods.PhoneCode,\n LoginMethods.AD,\n LoginMethods.LDAP,\n]\nconst qrcodeWays = [\n LoginMethods.AppQr,\n LoginMethods.WxMinQr,\n LoginMethods.WechatMpQrcode,\n]\n\nconst useMethods = (config: any) => {\n let dlm = config?.defaultLoginMethod\n let propsMethods = config?.loginMethods\n\n if (!propsMethods?.includes(dlm)) {\n dlm = propsMethods?.[0]\n }\n let renderInputWay = intersection(propsMethods, inputWays).length > 0\n let renderQrcodeWay = intersection(propsMethods, qrcodeWays).length > 0\n return [dlm, renderInputWay, renderQrcodeWay]\n}\n\nconst useDisables = (data: any) => {\n let { disableResetPwd, disableRegister } = data.config\n let { loginWay, autoRegister } = data\n\n if (loginWay === LoginMethods.PhoneCode) {\n disableResetPwd = true\n }\n if (loginWay === LoginMethods.LDAP) {\n disableResetPwd = true\n disableRegister = true\n }\n if (autoRegister === true) {\n disableRegister = true\n }\n return { disableResetPwd, disableRegister }\n}\n\nconst useSwitchStates = (loginWay: LoginMethods) => {\n let switchText = i18n.t('login.scanLogin')\n if (qrcodeWays.includes(loginWay)) {\n switchText = i18n.t('login.moreWays')\n }\n let inputNone = !inputWays.includes(loginWay) ? 'none' : ''\n let qrcodeNone = !qrcodeWays.includes(loginWay) ? 'none' : ''\n\n return { switchText, inputNone, qrcodeNone }\n}\nexport const GuardLoginView = (props: GuardLoginViewProps) => {\n let [defaultMethod, renderInputWay, renderQrcodeWay] = useMethods(\n props.config\n )\n const { t } = useTranslation()\n const [loginWay, setLoginWay] = useState(defaultMethod)\n const [canLoop, setCanLoop] = useState(false) // 允许轮询\n const client = useAuthClient()\n\n let publicKey = props.config?.publicKey!\n // let autoRegister = props.config?.autoRegister\n let ms = props.config?.loginMethods\n let { autoRegister, langRange } = props.config\n\n const firstInputWay = inputWays.filter((way) => ms.includes(way))[0]\n const firstQRcodeWay = qrcodeWays.filter((way) => ms.includes(way))[0]\n\n let { disableResetPwd, disableRegister } = useDisables({\n config: props.config,\n loginWay,\n autoRegister,\n })\n\n const __codePaser = (code: number) => {\n const action = codeMap[code]\n if (code === 200) {\n return (data: any) => {\n props.onLogin?.(data, client!) // 登录成功\n }\n }\n\n if (!action) {\n return (initData?: any) => {\n initData?.__messag && message.error(initData?.__messag)\n console.error('未捕获 code', code)\n }\n }\n\n // 解析成功\n if (action?.action === 'changeModule') {\n let m = action.module ? action.module : GuardModuleType.ERROR\n let init = action.initData ? action.initData : {}\n return (initData?: any) =>\n props.__changeModule?.(m, { ...initData, ...init })\n }\n if (action?.action === 'message') {\n return (initData?: any) => {\n message.error(initData?.__message)\n }\n }\n\n // 最终结果\n return () => {\n // props.onLoginError?.(data, client!) // 未捕获 code\n console.error('last action at loginview')\n }\n }\n\n const onLogin = (code: any, data: any, message?: string) => {\n const callback = __codePaser?.(code)\n if (code !== 200) {\n props.onLoginError?.({\n code,\n data,\n message,\n })\n }\n if (!data) {\n data = {}\n }\n data.__message = message\n callback?.(data)\n }\n\n const onBeforeLogin = (loginInfo: any) => {\n if (props.onBeforeLogin) {\n return props.onBeforeLogin?.(loginInfo, client)\n }\n return () => console.log('Guard not onBeforeLogin hooks')\n }\n\n useEffect(() => {\n if (qrcodeWays.includes(loginWay)) {\n setCanLoop(true)\n }\n // 可以设定 = fasle 的时候关闭 qrcode 的几个定时器\n // 不关的话,第二次进入会更快,也没什么代价(只有轮询)\n }, [loginWay])\n\n let { switchText, inputNone, qrcodeNone } = useSwitchStates(loginWay)\n // if (loading) {\n // return (\n // <div className=\"g2-view-container\">\n // <LoadShielding />\n // </div>\n // )\n // }\n return (\n <div className=\"g2-view-container\">\n {/* 两种方式都需要渲染的时候,才出现切换按钮 */}\n {renderInputWay && renderQrcodeWay && (\n <div className=\"g2-qrcode-switch\">\n <div className=\"switch-text\">{switchText}</div>\n <div\n className=\"switch-img\"\n onClick={() => {\n if (inputWays.includes(loginWay)) {\n setLoginWay(firstQRcodeWay)\n } else if (qrcodeWays.includes(loginWay)) {\n setLoginWay(firstInputWay)\n }\n }}\n >\n <div className=\"imgae-mask\" />\n <IconFont\n type=\"authing-a-erweima22\"\n className={`qrcode-switch-image ${inputNone}`}\n />\n <IconFont\n type=\"authing-diannao\"\n style={{ marginTop: '-6px' }}\n className={`qrcode-switch-image ${qrcodeNone}`}\n />\n </div>\n </div>\n )}\n\n <div className=\"g2-view-header\">\n <img src={props.config?.logo} alt=\"\" className=\"icon\" />\n <div className=\"title\">\n {t('common.login')} {props.config?.title}\n </div>\n </div>\n\n {renderInputWay && (\n <div className={inputNone}>\n <div className={`g2-view-tabs`}>\n <Tabs\n onChange={(k: any) => {\n setLoginWay(k)\n props.onLoginTabChange?.(k)\n }}\n activeKey={loginWay}\n >\n {ms?.includes(LoginMethods.Password) && (\n <Tabs.TabPane\n key={LoginMethods.Password}\n tab={t('login.pwdLogin')}\n >\n <LoginWithPassword\n publicKey={publicKey}\n autoRegister={autoRegister}\n host={props.config.host}\n onLogin={onLogin}\n onBeforeLogin={onBeforeLogin}\n passwordLoginMethods={props.config.passwordLoginMethods}\n />\n </Tabs.TabPane>\n )}\n {ms?.includes(LoginMethods.PhoneCode) && (\n <Tabs.TabPane\n key={LoginMethods.PhoneCode}\n tab={t('login.verifyCodeLogin')}\n >\n <LoginWithPhoneCode\n verifyCodeLength={\n props.config.__publicConfig__?.verifyCodeLength\n }\n autoRegister={autoRegister}\n onBeforeLogin={onBeforeLogin}\n onLogin={onLogin}\n />\n </Tabs.TabPane>\n )}\n {ms?.includes(LoginMethods.LDAP) && (\n <Tabs.TabPane\n key={LoginMethods.LDAP}\n tab={t('login.ldapLogin')}\n >\n <LoginWithLDAP\n publicKey={publicKey}\n autoRegister={autoRegister}\n host={props.config.host}\n onLogin={onLogin}\n onBeforeLogin={onBeforeLogin}\n />\n </Tabs.TabPane>\n )}\n {ms?.includes(LoginMethods.AD) && (\n <Tabs.TabPane key={LoginMethods.AD} tab={t('login.adLogin')}>\n <LoginWithAD onLogin={onLogin} />\n </Tabs.TabPane>\n )}\n </Tabs>\n </div>\n <div className={`g2-tips-line`}>\n {!disableResetPwd && (\n <div>\n <span\n className=\"link-like\"\n onClick={() =>\n props.__changeModule?.(GuardModuleType.FORGET_PWD, {})\n }\n >\n {t('login.forgetPwd')}\n </span>\n <span style={{ margin: '0 4px' }} className=\"gray\">\n 丨\n </span>\n </div>\n )}\n\n <div\n className=\"touch-tip\"\n onClick={() =>\n props.__changeModule?.(GuardModuleType.ANY_QUESTIONS, {})\n }\n >\n <IconFont\n type={'authing-a-question-line1'}\n // style={{ fontSize: 20, marginRight: 8 }}\n />\n </div>\n\n {!disableRegister && (\n <span className=\"go-to-register\">\n <span className=\"gray\">{t('common.noAccYet')}</span>\n <span\n className=\"link-like\"\n onClick={() =>\n props.__changeModule?.(GuardModuleType.REGISTER, {})\n }\n >\n {t('common.registerImmediate')}\n </span>\n </span>\n )}\n </div>\n </div>\n )}\n {renderQrcodeWay && (\n <div className={`g2-view-tabs ${qrcodeNone}`}>\n <Tabs\n onChange={(k: any) => {\n props.onLoginTabChange?.(k)\n }}\n >\n {ms?.includes(LoginMethods.WxMinQr) && (\n <Tabs.TabPane\n key={LoginMethods.WxMinQr}\n tab={t('login.scanLogin')}\n >\n <LoginWithWechatMiniQrcode\n onLogin={onLogin}\n canLoop={canLoop}\n qrCodeScanOptions={props.config.qrCodeScanOptions}\n />\n </Tabs.TabPane>\n )}\n {ms?.includes(LoginMethods.AppQr) && (\n <Tabs.TabPane\n key={LoginMethods.AppQr}\n tab={t('login.appScanLogin')}\n >\n <LoginWithAppQrcode\n onLogin={onLogin}\n canLoop={canLoop}\n qrCodeScanOptions={props.config.qrCodeScanOptions}\n />\n </Tabs.TabPane>\n )}\n {ms?.includes(LoginMethods.WechatMpQrcode) && (\n <Tabs.TabPane\n key={LoginMethods.WechatMpQrcode}\n tab={t('login.wechatmpQrcode')}\n >\n <LoginWithWechatmpQrcode\n onLogin={onLogin}\n canLoop={canLoop}\n qrCodeScanOptions={props.config.qrCodeScanOptions}\n />\n </Tabs.TabPane>\n )}\n </Tabs>\n </div>\n )}\n <div className=\"g2-social-login\">\n <SocialLogin\n appId={props.appId}\n config={props.config}\n onLogin={onLogin}\n />\n </div>\n <ChangeLanguage langRange={langRange} onLangChange={props.onLangChange} />\n </div>\n )\n}\n","import { message } from 'antd'\nimport { CompleteInfoEvents } from '../CompleteInfo/interface'\nimport { ForgetPasswordEvents } from '../ForgetPassword/interface'\nimport { LoginEvents } from '../Login/props'\nimport { RegisterEvents } from '../Register/props'\nimport { i18n } from '../_utils/locales'\n\nexport interface GuardEvents\n extends LoginEvents,\n RegisterEvents,\n CompleteInfoEvents,\n ForgetPasswordEvents {}\n\nexport const guardEventsFilter = (props: any) => {\n const events: GuardEvents = {}\n const eventsName = Object.keys(props).filter((name) => name.startsWith('on'))\n eventsName.forEach((eventName) => {\n events[eventName as keyof GuardEvents] = props[eventName]\n })\n\n return guardEventsHijacking(events)\n}\n\nconst eventsMapping: Partial<GuardEvents> = {\n onLogin: (...props) => {\n message.success(i18n.t('common.LoginSuccess'))\n return props\n },\n\n onRegister: (...props) => {\n message.success(i18n.t('common.registrationSuccess'))\n return props\n },\n}\n\nexport const guardEventsHijacking = (events: GuardEvents): GuardEvents => {\n const newEvents: GuardEvents = {}\n Object.keys(eventsMapping).forEach((eventsKey) => {\n // @ts-ignore\n newEvents[eventsKey] = (...props) => {\n // @ts-ignore\n const newProps = eventsMapping[eventsKey](...props)\n // @ts-ignore\n events[eventsKey]?.(...newProps)\n }\n })\n\n return {\n ...events,\n ...newEvents,\n }\n}\n","import {\n getDefaultG2Config,\n IG2Config,\n IG2Events,\n IG2FCProps,\n IG2FCViewProps,\n} from '../Type'\nimport { SocialConnectionProvider } from 'authing-js-sdk'\nimport { QrCodeAuthenticationClient } from 'authing-js-sdk/build/main/lib/authentication/QrCodeAuthenticationClient'\nimport { PasswordLoginMethods } from '../AuthingGuard/api'\nimport {\n PasswordLoginParams,\n LDAPLoginParams,\n ADLoginParams,\n PhoneCodeLoginParams,\n AuthenticationClient,\n LoginMethods,\n User,\n} from '..'\n\nexport interface LoginConfig extends IG2Config {\n autoRegister: boolean\n disableResetPwd: boolean\n disableRegister: boolean\n defaultLoginMethod: LoginMethods\n loginMethods: LoginMethods[]\n passwordLoginMethods: PasswordLoginMethods[]\n socialConnections?: SocialConnectionProvider[]\n socialConnectionsBtnShape?: 'default' | 'button' | 'icon'\n enterpriseConnections?: string[]\n qrCodeScanOptions?: Parameters<QrCodeAuthenticationClient['startScanning']>[1]\n publicKey?: string\n}\n\nconst defaultConfig: LoginConfig = {\n ...getDefaultG2Config(),\n autoRegister: false,\n disableResetPwd: false,\n disableRegister: false,\n defaultLoginMethod: LoginMethods.Password,\n loginMethods: [LoginMethods.Password, LoginMethods.PhoneCode],\n socialConnectionsBtnShape: 'default',\n passwordLoginMethods: [\n 'email-password',\n 'username-password',\n 'phone-password',\n ],\n}\n\nexport interface LoginEvents extends IG2Events {\n onLogin?: (user: User, authClient: AuthenticationClient) => void\n onLoginError?: (errorMessages: any) => void\n onLoginTabChange?: (activeTab: LoginMethods) => void\n onBeforeLogin?: (\n loginInfo:\n | PasswordLoginParams\n | LDAPLoginParams\n | ADLoginParams\n | PhoneCodeLoginParams,\n authClient: AuthenticationClient\n ) => boolean | Promise<boolean>\n}\n\nexport interface GuardLoginProps extends IG2FCProps, LoginEvents {\n config?: Partial<LoginConfig>\n}\nexport interface GuardLoginViewProps extends GuardLoginProps, IG2FCViewProps {\n config: LoginConfig\n}\n\nexport const getDefaultLoginConfig = (): LoginConfig => ({\n ...getDefaultG2Config(),\n ...defaultConfig,\n})\n","import { RegisterMethods } from 'authing-js-sdk'\nimport { IG2FCProps, IG2Config, getDefaultG2Config, IG2Events } from '../Type'\nimport {\n AuthenticationClient,\n User,\n EmailRegisterParams,\n PhoneRegisterParams,\n} from '..'\nimport { Agreement } from '../AuthingGuard/api'\n\nexport interface RegisterConfig extends IG2Config {\n disableRegister: boolean\n registerMethods: RegisterMethods[]\n defaultRegisterMethod: RegisterMethods\n publicKey?: string\n agreementEnabled?: boolean\n agreements?: Agreement[]\n}\n\nconst defaultConfig: RegisterConfig = {\n ...getDefaultG2Config(),\n disableRegister: false,\n defaultRegisterMethod: RegisterMethods.Email,\n registerMethods: [RegisterMethods.Email, RegisterMethods.Phone],\n}\n\nexport interface RegisterEvents extends IG2Events {\n onBeforeRegister?: (\n registerInfo: EmailRegisterParams | PhoneRegisterParams,\n authClient: AuthenticationClient\n ) => boolean | Promise<boolean>\n onRegister?: (user: User, authClient: AuthenticationClient) => void\n onRegisterError?: (error: any) => void\n onRegisterTabChange?: (activeTab: RegisterMethods) => void\n}\n\nexport interface GuardRegisterProps extends IG2FCProps, RegisterEvents {\n config?: Partial<RegisterConfig>\n}\n\nexport interface GuardRegisterViewProps extends GuardRegisterProps {\n config: RegisterConfig\n}\n\nconst getDefaultConfig = (): RegisterConfig => ({\n ...getDefaultG2Config(),\n ...defaultConfig,\n})\n\nexport const getDefaultRegisterConfig = getDefaultConfig\n","import { Divider, Input } from 'antd'\nimport React, {\n FC,\n Fragment,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\nimport './style.less'\n\ninterface VerifyCodeInputProps extends React.HTMLAttributes<HTMLDivElement> {\n length?: number\n size?: string\n gutter?: string\n onEenter?: Function\n showDivider?: boolean\n onChange?: any\n value?: Array<number | string>\n}\n\nexport const VerifyCodeInput: FC<VerifyCodeInputProps> = ({\n length = 4,\n size = '46px',\n gutter = length > 4 ? '14px' : '24px',\n className,\n onEenter,\n showDivider,\n onChange,\n value,\n ...rest\n}) => {\n const inputRef = useRef<any[]>([])\n\n const codeInputRef = useRef<HTMLDivElement>(null)\n\n const [verifyCode, setVerifyCode] = useState(value ?? [])\n\n const handleChange = useCallback(\n (val: string | undefined = '', index: number) => {\n const num = parseInt(val)\n if (isNaN(num)) {\n val = ''\n } else {\n val = String(num)\n }\n const codes = [...verifyCode]\n codes[index] = val.split('').slice(-1)[0] || ''\n setVerifyCode(codes)\n onChange?.(codes)\n\n if (val && inputRef.current[index + 1]) {\n inputRef.current[index + 1].focus()\n }\n },\n [verifyCode, onChange]\n )\n\n const handleKeyDown = (evt: any, index: number) => {\n const currentVal = verifyCode[index]\n\n switch (evt.keyCode) {\n case 8:\n if (!currentVal && inputRef.current[index - 1]) {\n handleChange('', index - 1)\n inputRef.current[index - 1].focus()\n }\n break\n\n case 13:\n onEenter?.()\n break\n default:\n break\n }\n }\n\n useEffect(() => {\n const el = codeInputRef.current\n\n const pasteEvent = (e: ClipboardEvent) => {\n e.preventDefault()\n e.stopPropagation()\n\n let paste = e.clipboardData?.getData('text')\n\n if (paste && !isNaN(parseInt(paste))) {\n if (paste.length < length) {\n const data = verifyCode.map((_i, index) => paste?.[index] ?? '')\n setVerifyCode(data)\n onChange?.(data)\n inputRef.current[paste.length].focus()\n } else {\n const data = paste.slice(0, length).split('')\n setVerifyCode(data)\n onChange?.(data)\n inputRef.current[length - 1].focus()\n }\n }\n }\n el?.addEventListener('paste', pasteEvent)\n\n return () => {\n el?.removeEventListener('paste', pasteEvent)\n }\n }, [length, onChange, setVerifyCode, verifyCode])\n\n return (\n <div ref={codeInputRef} className=\"authing-g2-code-input\" {...rest}>\n {new Array(length).fill(0).map((_, index) => (\n <Fragment key={index}>\n <Input\n ref={(el) => (inputRef.current[index] = el)}\n style={{\n width: size,\n minWidth: size,\n minHeight: size,\n height: size,\n lineHeight: size,\n marginLeft: index === 0 ? 0 : gutter,\n }}\n className=\"authing-g2-code-input-item\"\n size=\"large\"\n autoFocus={index === 0}\n onKeyDown={(evt) => handleKeyDown(evt, index)}\n value={verifyCode[index]}\n onChange={(evt) => {\n evt.persist()\n // @ts-ignore\n if (evt.nativeEvent.isComposing) {\n return\n }\n handleChange(evt.target.value, index)\n }}\n pattern=\"[0-9]*\"\n type=\"tel\"\n />\n {showDivider && index === Math.floor(length / 2 - 1) && (\n <Divider className=\"authing-g2-code-input-divider\" />\n )}\n </Fragment>\n ))}\n </div>\n )\n}\n","import Form, { FormItemProps } from 'antd/lib/form'\nimport React from 'react'\nimport { useTranslation } from 'react-i18next'\n\nexport interface VerifyCodeFormItemProps extends FormItemProps {\n codeLength: number\n ruleKeyword?: string\n}\n\nexport const VerifyCodeFormItem: React.FC<VerifyCodeFormItemProps> = (\n props\n) => {\n const { t } = useTranslation()\n const {\n codeLength,\n ruleKeyword = t('common.totpCode'),\n ...formItemProps\n } = props\n return (\n <Form.Item\n name=\"mfaCode\"\n className=\"g2-mfa-totp-verify-input\"\n // validateTrigger={'onBlur'}\n rules={[\n {\n validator(_, value: string[]) {\n if ((value ?? []).join('').length !== codeLength) {\n return Promise.reject(\n t('common.isMissing', {\n name: ruleKeyword,\n })\n )\n }\n return Promise.resolve()\n },\n },\n ]}\n {...formItemProps}\n />\n )\n}\n","import { UserOutlined } from '@ant-design/icons'\nimport { Input, message, message as Message } from 'antd'\nimport { Form } from 'antd'\nimport { EmailScene, User } from 'authing-js-sdk'\nimport React, { useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { VerifyCodeInput } from '../VerifyCodeInput'\nimport { useAuthClient } from '../../Guard/authClient'\nimport { SendCodeBtn } from '../../SendCode/SendCodeBtn'\nimport SubmitButton from '../../SubmitButton'\nimport { EmailFormItem, ICheckProps } from '../../ValidatorRules'\nimport { MFAConfig } from '../props'\nimport { VerifyCodeFormItem } from '../VerifyCodeInput/VerifyCodeFormItem'\n\ninterface BindMFAEmailProps {\n mfaToken: string\n onBind: (email: string) => void\n config: any\n}\nexport const BindMFAEmail: React.FC<BindMFAEmailProps> = ({\n mfaToken,\n onBind,\n config,\n}) => {\n const submitButtonRef = useRef<any>(null)\n const { t } = useTranslation()\n const [form] = Form.useForm()\n const ref = useRef<ICheckProps>(null)\n\n const onFinish = async ({ email }: any) => {\n submitButtonRef.current?.onSpin(true)\n await form.validateFields()\n try {\n onBind(email)\n } catch (e: any) {\n const error = JSON.parse(e?.message)\n submitButtonRef.current.onError()\n Message.error(error.message)\n } finally {\n submitButtonRef.current?.onSpin(false)\n }\n }\n return (\n <>\n <p className=\"authing-g2-mfa-title\">{t('common.bindEmail')}</p>\n <p className=\"authing-g2-mfa-tips\">{t('common.bindEmailDoc')}</p>\n <Form\n form={form}\n onFinish={onFinish}\n onFinishFailed={() => submitButtonRef.current.onError()}\n onValuesChange={(value) => {\n ref.current?.check(value)\n }}\n >\n <EmailFormItem\n className=\"authing-g2-input-form\"\n name=\"email\"\n userPoolId={config.__publicConfig__.userPoolId}\n form={form}\n ref={ref}\n checkRepeat={true}\n >\n <Input\n className=\"authing-g2-input\"\n autoComplete=\"email\"\n size=\"large\"\n placeholder={t('login.inputEmail')}\n prefix={<UserOutlined style={{ color: '#878A95' }} />}\n />\n </EmailFormItem>\n\n <SubmitButton text={t('common.sure')} ref={submitButtonRef} />\n </Form>\n </>\n )\n}\n\ninterface VerifyMFAEmailProps {\n email: string\n mfaToken: string\n onVerify: (code: number, data: any) => void\n sendCodeRef: React.RefObject<HTMLButtonElement>\n codeLength: number\n}\n\nexport const VerifyMFAEmail: React.FC<VerifyMFAEmailProps> = ({\n email,\n mfaToken,\n onVerify,\n sendCodeRef,\n codeLength,\n}) => {\n const authClient = useAuthClient()\n const submitButtonRef = useRef<any>(null)\n const { t } = useTranslation()\n const [form] = Form.useForm()\n const [sent, setSent] = useState(false)\n\n const sendVerifyCode = async () => {\n try {\n await authClient.sendEmail(email!, EmailScene.MfaVerify)\n setSent(true)\n return true\n } catch (e) {\n const errorMessage = JSON.parse(e.message)\n message.error(errorMessage.message)\n return false\n }\n }\n\n const onFinish = async (values: any) => {\n submitButtonRef.current?.onSpin(true)\n const mfaCode = form.getFieldValue('mfaCode')\n\n try {\n const user: User = await authClient.mfa.verifyAppEmailMfa({\n mfaToken,\n email: email!,\n code: mfaCode.join(''),\n })\n\n onVerify(200, user)\n } catch (e: any) {\n const error = JSON.parse(e?.message)\n onVerify(error.code as number, error)\n } finally {\n submitButtonRef.current?.onSpin(false)\n }\n }\n\n return (\n <>\n <p className=\"authing-g2-mfa-title\">{t('login.inputEmailCode')}</p>\n <p className=\"authing-g2-mfa-tips\">\n {sent\n ? `${t('login.verifyCodeSended')} ${email}`\n : t('login.clickSent')}\n </p>\n <Form\n form={form}\n onFinish={onFinish}\n onFinishFailed={() => submitButtonRef.current?.onError()}\n >\n <VerifyCodeFormItem\n codeLength={codeLength}\n ruleKeyword={t('common.captchaCode')}\n >\n <VerifyCodeInput length={codeLength} />\n </VerifyCodeFormItem>\n\n <SendCodeBtn\n btnRef={sendCodeRef}\n beforeSend={() => sendVerifyCode()}\n type=\"link\"\n />\n\n <SubmitButton\n text={t('common.sure')}\n ref={submitButtonRef}\n className=\"g2-mfa-submit-button\"\n />\n </Form>\n </>\n )\n}\n\nexport const MFAEmail: React.FC<{\n mfaToken: string\n email?: string\n mfaLogin: any\n config: MFAConfig\n}> = ({ email: userEmail, mfaToken, mfaLogin, config }) => {\n const [email, setEmail] = useState(userEmail)\n const sendCodeRef = useRef<HTMLButtonElement>(null)\n\n const codeLength = config.__publicConfig__?.verifyCodeLength\n\n return (\n <>\n {email ? (\n <VerifyMFAEmail\n mfaToken={mfaToken}\n email={email}\n onVerify={(code, data) => {\n mfaLogin(code, data)\n }}\n sendCodeRef={sendCodeRef}\n codeLength={codeLength ?? 4}\n />\n ) : (\n <BindMFAEmail\n config={config}\n mfaToken={mfaToken}\n onBind={(email: string) => {\n console.log('email', email)\n setEmail(email)\n sendCodeRef.current?.click()\n }}\n />\n )}\n </>\n )\n}\n","import { UserOutlined } from '@ant-design/icons'\nimport { message } from 'antd'\nimport { Form } from 'antd'\nimport { User } from 'authing-js-sdk'\nimport React, { useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { VerifyCodeInput } from '../VerifyCodeInput'\nimport { useAuthClient } from '../../Guard/authClient'\nimport { SendCodeBtn } from '../../SendCode/SendCodeBtn'\nimport SubmitButton from '../../SubmitButton'\nimport { ICheckProps, PhoneFormItem } from '../../ValidatorRules'\nimport { VerifyCodeFormItem } from '../VerifyCodeInput/VerifyCodeFormItem'\nimport { MFAConfig } from '../props'\nimport { InputNumber } from '../../InputNumber'\nexport interface BindMFASmsProps {\n mfaToken: string\n onBind: (phone: string) => void\n config: any\n}\n\nexport const BindMFASms: React.FC<BindMFASmsProps> = ({\n mfaToken,\n onBind,\n config,\n}) => {\n const submitButtonRef = useRef<any>(null)\n const { t } = useTranslation()\n const [form] = Form.useForm()\n\n const ref = useRef<ICheckProps>(null)\n const onFinish = async ({ phone }: any) => {\n submitButtonRef.current.onSpin(true)\n await form.validateFields()\n try {\n onBind(phone)\n } catch (e) {\n // do nothing\n submitButtonRef.current?.onError()\n } finally {\n submitButtonRef.current?.onSpin(false)\n }\n }\n\n return (\n <>\n <h3 className=\"authing-g2-mfa-title\">{t('common.bindPhone')}</h3>\n <p className=\"authing-g2-mfa-tips\">{t('login.bindPhoneInfo')}</p>\n <Form\n form={form}\n onFinish={onFinish}\n onFinishFailed={() => submitButtonRef.current.onError()}\n onValuesChange={(values) => {\n ref.current?.check(values)\n }}\n >\n <PhoneFormItem\n className=\"authing-g2-input-form\"\n name=\"phone\"\n userPoolId={config.__publicConfig__.userPoolId}\n form={form}\n ref={ref}\n checkRepeat={true}\n >\n <InputNumber\n className=\"authing-g2-input\"\n autoComplete=\"tel\"\n size=\"large\"\n placeholder={t('login.inputPhone')}\n prefix={<UserOutlined style={{ color: '#878A95' }} />}\n />\n </PhoneFormItem>\n <SubmitButton text={t('common.sure')} ref={submitButtonRef} />\n </Form>\n </>\n )\n}\n\nexport interface VerifyMFASmsProps {\n mfaToken: string\n phone: string\n onVerify: (code: number, data: any) => void\n sendCodeRef: React.RefObject<HTMLButtonElement>\n codeLength: number\n}\n\nexport const VerifyMFASms: React.FC<VerifyMFASmsProps> = ({\n mfaToken,\n phone,\n onVerify,\n sendCodeRef,\n codeLength = 4,\n}) => {\n const authClient = useAuthClient()\n const submitButtonRef = useRef<any>(null)\n const { t } = useTranslation()\n const [form] = Form.useForm()\n\n const [sent, setSent] = useState(false)\n\n const onFinish = async (values: any) => {\n submitButtonRef.current.onSpin(true)\n const mfaCode = form.getFieldValue('mfaCode')\n try {\n const user: User = await authClient.mfa.verifyAppSmsMfa({\n mfaToken,\n phone: phone!,\n code: mfaCode.join(''),\n })\n // TODO\n onVerify(200, user)\n } catch (e) {\n const error = JSON.parse(e.message)\n submitButtonRef.current.onError()\n onVerify(error.code as number, error)\n } finally {\n submitButtonRef.current?.onSpin(false)\n }\n }\n\n const sendVerifyCode = async () => {\n try {\n await authClient.sendSmsCode(phone!)\n setSent(true)\n return true\n } catch (e) {\n const errorMessage = JSON.parse(e.message)\n message.error(errorMessage.message)\n return false\n }\n }\n\n return (\n <>\n <h3 className=\"authing-g2-mfa-title\">{t('login.inputPhoneCode')}</h3>\n <p className=\"authing-g2-mfa-tips\">\n {sent\n ? `${t('login.verifyCodeSended')} ${phone}`\n : t('login.clickSent')}\n </p>\n <Form\n form={form}\n onFinish={onFinish}\n onFinishFailed={() => submitButtonRef.current.onError()}\n >\n <VerifyCodeFormItem\n codeLength={codeLength}\n ruleKeyword={t('common.captchaCode')}\n >\n <VerifyCodeInput length={codeLength} />\n </VerifyCodeFormItem>\n\n <SendCodeBtn\n btnRef={sendCodeRef}\n beforeSend={() => sendVerifyCode()}\n type=\"link\"\n />\n\n <SubmitButton\n text={t('common.sure')}\n ref={submitButtonRef}\n className=\"g2-mfa-submit-button\"\n />\n </Form>\n </>\n )\n}\n\nexport const MFASms: React.FC<{\n mfaToken: string\n phone?: string\n mfaLogin: any\n config: MFAConfig\n}> = ({ phone: userPhone, mfaToken, mfaLogin, config }) => {\n const [phone, setPhone] = useState(userPhone)\n const sendCodeRef = useRef<HTMLButtonElement>(null)\n\n const codeLength = config.__publicConfig__?.verifyCodeLength\n\n return (\n <>\n {phone ? (\n <VerifyMFASms\n mfaToken={mfaToken}\n phone={phone}\n onVerify={(code, data) => {\n mfaLogin(code, data)\n }}\n codeLength={codeLength ?? 4}\n sendCodeRef={sendCodeRef}\n />\n ) : (\n <BindMFASms\n config={config}\n mfaToken={mfaToken}\n onBind={(phone: string) => {\n setPhone(phone)\n sendCodeRef.current?.click()\n }}\n />\n )}\n </>\n )\n}\n","import { nets, TinyFaceDetectorOptions } from 'face-api.js'\n\nlet inputSize = 512\nlet scoreThreshold = 0.5\n\nexport const devicesConstraints = {\n video: {\n width: 210,\n height: 210,\n },\n}\nexport const FACE_SCORE = 0.65\n\nexport function getFaceDetectorOptions() {\n return new TinyFaceDetectorOptions({ inputSize, scoreThreshold })\n}\n\nexport function getCurrentFaceDetectionNet() {\n return nets.tinyFaceDetector\n}\n\nexport function isFaceDetectionModelLoaded() {\n return !!getCurrentFaceDetectionNet().params\n}\n\nexport function dataURItoBlob(base64Data: any) {\n var byteString\n if (base64Data.split(',')[0].indexOf('base64') >= 0)\n byteString = atob(base64Data.split(',')[1])\n else byteString = unescape(base64Data.split(',')[1])\n var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0]\n var ia = new Uint8Array(byteString.length)\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i)\n }\n return new Blob([ia], { type: mimeString })\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { detectSingleFace } from 'face-api.js'\nimport { useGuardHttp } from '../../_utils/guradHttp'\nimport {\n FACE_SCORE,\n devicesConstraints,\n dataURItoBlob,\n getCurrentFaceDetectionNet,\n getFaceDetectorOptions,\n isFaceDetectionModelLoaded,\n} from './face_deps'\nimport { ImagePro } from '../../ImagePro'\nimport SubmitButton from '../../SubmitButton'\n\nconst useDashoffset = (percent: number) => {\n // 接受 0 - 1,返回 0-700 之间的偏移量\n let offset = percent * 7\n\n // 在识别成功的时候,返回绿色\n let dashStyle = {}\n return { offset, dashStyle }\n}\n\nexport const MFAFace = (props: any) => {\n let { postForm, post } = useGuardHttp()\n let { t } = useTranslation()\n const [faceState, setFaceState] = useState('ready') // ready, identifying, retry\n const [percent, setPercent] = useState(0) // 识别进度(相似性)\n\n const videoRef = useRef<HTMLVideoElement>(null)\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const interval = useRef<NodeJS.Timeout | undefined>()\n const p1 = useRef<string>() // p1 key\n const p2 = useRef<string>() // p2 key\n const cooldown = useRef<number>(6) // p2 cooldown, * 500ms\n const cdnBase = props.config.__publicConfig__.cdnBase\n\n let { offset, dashStyle } = useDashoffset(percent)\n\n // 预加载数据\n useEffect(() => {\n // 载入 cdn\n let cdnContext = getCurrentFaceDetectionNet().loadFromUri(\n `${cdnBase}/face-api/v1/tiny_face_detector_model-weights_manifest.json`\n )\n cdnContext.then((result) => {\n // setLoading(false)\n })\n\n if (faceState !== 'identifying') {\n return // 不存在 video dom,不要去尝试了\n }\n let devicesContext = navigator.mediaDevices.getUserMedia(devicesConstraints)\n devicesContext\n .then((stream) => {\n videoRef.current!.srcObject = stream\n })\n .catch((e) => {\n // 没有设备,或没有授权\n console.error(e)\n // setVideoType(VideoAction.ERROR)\n // setProgressStatus('exception')\n // setPercent(100)\n // setVideoError(e.message)\n })\n\n return () => {\n interval.current && clearInterval(interval.current)\n }\n }, [faceState, interval, props.config, cdnBase])\n\n // 监听 faceState\n useEffect(() => {\n if (faceState === 'identifying' || faceState === 'retry') {\n props.setShowMethods(false)\n } else {\n props.setShowMethods(true)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [faceState])\n\n // 上传文件\n const uploadImage = async (blob: Blob) => {\n const formData = new FormData()\n formData.append('folder', 'photos')\n formData.append('file', blob, 'personal.jpeg')\n\n let url = '/api/v2/upload?folder=photos&private=true'\n let result = await postForm<any>(url, formData)\n let key = result.data?.key\n return key\n }\n\n // get base 64\n const getBase64 = (videoDom: any) => {\n const canvas = canvasRef.current!\n const ctx = canvas!.getContext('2d')!\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n ctx.drawImage(videoDom, 0, 0, canvas.width, canvas.height)\n const base64Data = canvas.toDataURL('image/jpeg', 1.0)\n return base64Data\n }\n\n const faceLogin = (result: any) => {\n let { code, data, message } = result\n\n if (code === 1700 || code === 1701 || code === 1702) {\n p1.current = undefined\n p2.current = undefined\n interval.current = undefined\n cooldown.current = 6\n setFaceState('retry')\n }\n props.mfaLogin(code, data, message)\n }\n\n const faceBind = () => {\n let url = '/api/v2/mfa/face/associate'\n let data = {\n photoA: p1.current,\n photoB: p2.current,\n }\n let mfaToken = props.initData.mfaToken\n let config = {\n headers: {\n authorization: mfaToken,\n },\n }\n post(url, data, config).then((result) => {\n faceLogin(result)\n })\n }\n\n const faceCheck = () => {\n let url = '/api/v2/mfa/face/verify'\n let data = {\n photo: p1.current,\n }\n let mfaToken = props.initData.mfaToken\n let config = {\n headers: {\n authorization: mfaToken,\n },\n }\n post(url, data, config).then((result) => {\n // 如果是 1702,那么久绑定一个\n faceLogin(result)\n })\n }\n\n // bind 的情况\n const goToBindScene = (key: string) => {\n if (!p1.current) {\n p1.current = key\n } else {\n if (cooldown.current > 0) {\n cooldown.current -= 1\n }\n if (cooldown.current <= 0) {\n p2.current = key\n // 彻底上传完了,应该走验证了\n interval.current && clearInterval(interval.current)\n faceBind()\n }\n }\n }\n\n // goToCheck 的情况\n const goToCheckScene = (key: string) => {\n p1.current = key\n interval.current && clearInterval(interval.current)\n faceCheck()\n }\n\n // 识别成功,自动前进到下一个步骤\n const quitIdentifying = (blob: Blob) => {\n setPercent(100)\n uploadImage(blob).then((key) => {\n if (props.initData?.faceMfaEnabled === true) {\n goToCheckScene(key)\n } else {\n goToBindScene(key)\n }\n })\n }\n\n const autoShoot = useCallback(async () => {\n if (!interval.current) {\n interval.current = setInterval(() => autoShoot(), 500)\n }\n const videoDom = videoRef.current!\n if (videoDom.paused || videoDom.ended || !isFaceDetectionModelLoaded()) {\n return\n }\n const options = getFaceDetectorOptions()\n const result = await detectSingleFace(videoDom, options)\n\n if (result) {\n if (result.score > FACE_SCORE) {\n const base64Data = getBase64(videoDom)\n const blob = dataURItoBlob(base64Data)\n quitIdentifying(blob) // 识别成功,退出识别\n } else {\n // 识别失败,但是有结果,设置相似性\n setPercent(() => {\n return (result.score / FACE_SCORE) * 100\n })\n // console.log('识别失败,但是有结果,设置相似性', percent)\n }\n } else {\n setPercent(10)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n <div>\n <h3 className=\"authing-g2-mfa-title\">{t('common.faceText1')}</h3>\n <p className=\"authing-g2-mfa-tips\">{t('common.faceText2')}</p>\n {faceState === 'ready' && (\n <>\n <ImagePro\n className=\"g2-mfa-face-image\"\n width={247}\n height={131}\n src={`${cdnBase}/face.png`}\n alt=\"\"\n />\n\n <SubmitButton\n onClick={() => {\n setFaceState('identifying')\n autoShoot()\n }}\n text={t('common.faceText3')}\n className=\"mfa-face\"\n />\n </>\n )}\n <div\n className=\"g2-mfa-face-identifying\"\n style={{\n display: faceState !== 'ready' ? 'flex' : 'none',\n }}\n >\n <video\n className=\"video-round\"\n ref={videoRef}\n // onLoadedMetadata={() => onIdentify()}\n id=\"inputVideo\"\n autoPlay\n muted\n playsInline\n />\n <div\n className=\"video-round mesh\"\n style={{\n display: faceState === 'retry' ? 'flex' : 'none',\n }}\n onClick={() => {\n setFaceState('identifying')\n setPercent(0)\n autoShoot()\n }}\n >\n {t('common.faceText4')}\n </div>\n\n <div className=\"video-round ring\">\n <svg width={240} height={240} fill=\"none\">\n <circle\n className=\"svg-circle-running\"\n style={dashStyle}\n strokeDasharray={700} // 根据周长做 0-700 之间的数值表示准确率\n strokeDashoffset={700 - offset} // 处理这个 offset, 0-700之间的数\n cx={120}\n cy={120}\n r={110}\n />\n </svg>\n </div>\n </div>\n\n <canvas\n style={{\n width: 210,\n height: 210,\n opacity: 0,\n position: 'absolute',\n display: 'none',\n }}\n ref={canvasRef}\n />\n </div>\n )\n}\n","import { getDefaultG2Config, IG2Config, IG2Events, IG2FCProps } from '../Type'\nimport { AuthenticationClient, User } from '..'\n\nexport interface MFAConfig extends IG2Config {}\n\nconst defaultConfig: MFAConfig = {\n ...getDefaultG2Config(),\n}\n\nexport const getDefaultMFAConfig = (): MFAConfig => ({\n ...getDefaultG2Config(),\n ...defaultConfig,\n})\n\nexport interface MFAEvents extends IG2Events {\n onLogin?: (user: User, authClient: AuthenticationClient) => void\n}\n\nexport enum MFAType {\n SMS = 'SMS',\n EMAIL = 'EMAIL',\n TOTP = 'OTP',\n FACE = 'FACE',\n}\n\nexport interface GuardMFAInitData {\n mfaToken: string\n applicationMfa: {\n mfaPolicy: MFAType\n sort: number\n status: 0 | 1\n }[]\n faceMfaEnabled: boolean\n totpMfaEnabled: boolean\n email?: string\n phone?: string\n avatar?: string\n nickme?: string\n username?: string\n current?: MFAType\n}\n\nexport interface GuardMFAProps extends IG2FCProps, MFAEvents {\n config: Partial<MFAConfig>\n initData: GuardMFAInitData\n}\n\nexport interface GuardMFAViewProps extends GuardMFAProps {\n config: MFAConfig\n initData: GuardMFAInitData\n}\n","import { Form } from 'antd'\nimport React, { useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useAsyncFn } from 'react-use'\nimport { GuardModuleType } from '../../Guard/module'\nimport { useGuardHttp } from '../../_utils/guradHttp'\nimport { GuardMFAInitData, MFAConfig } from '../props'\nimport { message as Message } from 'antd'\nimport SubmitButton from '../../SubmitButton'\nimport { VerifyCodeFormItem } from '../VerifyCodeInput/VerifyCodeFormItem'\nimport { VerifyCodeInput } from '../VerifyCodeInput'\nexport interface BindMFATotpProps {\n initData: GuardMFAInitData\n changeModule: any\n}\n\nexport const BindMFATotp: React.FC<BindMFATotpProps> = ({\n changeModule,\n initData,\n}) => {\n const { t } = useTranslation()\n\n const next = () => changeModule(GuardModuleType.BIND_TOTP, initData)\n return (\n <>\n <p className=\"authing-g2-mfa-title\">{t('common.bindTotp')}</p>\n <p className=\"authing-g2-mfa-tips\">{t('common.otpText1')}</p>\n <SubmitButton\n text={t('common.sure')}\n onClick={next}\n className=\"g2-mfa-submit-button bind-totp\"\n />\n </>\n )\n}\n\nexport interface VerifyMFATotpProps {\n mfaToken: string\n mfaLogin: any\n}\n\nexport const VerifyMFATotp: React.FC<VerifyMFATotpProps> = ({\n mfaToken,\n mfaLogin,\n}) => {\n const { t } = useTranslation()\n const [form] = Form.useForm()\n\n const submitButtonRef = useRef<any>(null)\n\n const { post } = useGuardHttp()\n\n const [, onFinish] = useAsyncFn(async () => {\n submitButtonRef.current.onSpin(true)\n\n const mfaCode = form.getFieldValue('mfaCode')\n try {\n const { code, data, message } = await post(\n '/api/v2/mfa/totp/verify',\n {\n totp: mfaCode.join(''),\n },\n {\n headers: {\n authorization: mfaToken,\n },\n }\n )\n\n if (code !== 200) {\n mfaLogin(200, message)\n Message.error(message)\n } else {\n mfaLogin(200, data)\n }\n } finally {\n submitButtonRef.current.onSpin(false)\n }\n }, [mfaToken])\n\n return (\n <>\n <p className=\"authing-g2-mfa-title\">{t('login.accPwdLoginVerify')}</p>\n <p className=\"authing-g2-mfa-tips\">{t('login.inputSixCode')}</p>\n <Form\n form={form}\n onSubmitCapture={() => {}}\n onFinish={onFinish}\n onFinishFailed={() => submitButtonRef.current.onError()}\n >\n <VerifyCodeFormItem codeLength={6}>\n <VerifyCodeInput length={6} showDivider={true} gutter={'10px'} />\n </VerifyCodeFormItem>\n\n <SubmitButton text={t('common.sure')} ref={submitButtonRef} />\n </Form>\n </>\n )\n}\n\nexport interface MFATotpProps {\n changeModule: any\n config: MFAConfig\n initData: GuardMFAInitData\n mfaLogin: any\n}\n\nexport const MFATotp: React.FC<MFATotpProps> = ({\n changeModule,\n initData,\n mfaLogin,\n}) => {\n return (\n <>\n {initData.totpMfaEnabled ? (\n <VerifyMFATotp mfaToken={initData.mfaToken} mfaLogin={mfaLogin} />\n ) : (\n <BindMFATotp initData={initData} changeModule={changeModule} />\n )}\n </>\n )\n}\n","import { Tabs } from 'antd'\nimport React, { ReactNode, useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ImagePro } from '../ImagePro'\nimport { IconFont } from '../IconFont'\nimport { GuardDownloadATViewProps } from './interface'\nimport './styles.less'\nconst window: Window = require('global/window')\n\nenum DownloadType {\n IOS = 'ios',\n Android = 'Android',\n}\n\nexport const GuardDownloadATView: React.FC<GuardDownloadATViewProps> = ({\n config,\n}) => {\n const { t } = useTranslation()\n\n const cdnBase = config.__publicConfig__?.cdnBase\n\n const downloadConfig: Record<DownloadType, any> = useMemo(\n () => ({\n [DownloadType.IOS]: {\n title: t('common.downloadTotpAppIOS'),\n google: `${cdnBase}/GoogleAuthenticator-Apple.png`,\n microsoft: `${cdnBase}/MicrosoftAuthenticator-Apple.png`,\n },\n [DownloadType.Android]: {\n title: t('common.downloadTotpAppAndroid'),\n google: `${cdnBase}/GoogleAuthenticator-Authing.png`,\n microsoft: `${cdnBase}/MicrosoftAuthenticator-Baidu.png`,\n },\n }),\n [cdnBase, t]\n )\n\n const renderTab = useMemo(\n () =>\n (Object.keys(downloadConfig) as DownloadType[]).map<ReactNode>(\n (value: DownloadType, index: number) => (\n <Tabs.TabPane\n tab={downloadConfig[value].title}\n key={index}\n className=\"g2-mfa-download-at-tab\"\n >\n <span className=\"g2-mfa-totp-download-subtitle\">\n {t('common.downloadTotpAppDocs')}\n </span>\n <div className=\"g2-mfa-totp-download-qrcode\">\n <div className=\"g2-mfa-totp-download-qrcode-item\">\n <ImagePro\n width={120}\n height={120}\n className=\"g2-mfa-totp-download-image\"\n src={downloadConfig[value].google}\n alt=\"Google Authenticator\"\n />\n <span className=\"g2-mfa-totp-download-qrcode-text\">\n Google Authenticator\n </span>\n </div>\n <div className=\"g2-mfa-totp-download-qrcode-item\">\n <ImagePro\n width={120}\n height={120}\n className=\"g2-mfa-totp-download-image\"\n src={downloadConfig[value].microsoft}\n alt=\"Microsoft Authenticator\"\n />\n <span className=\"g2-mfa-totp-download-qrcode-text\">\n Microsoft Authenticator\n </span>\n </div>\n </div>\n </Tabs.TabPane>\n )\n ),\n [downloadConfig, t]\n )\n\n const onBack = () => window.history.back()\n\n return (\n <div className=\"g2-view-container\">\n <div className=\"g2-view-back\">\n <span onClick={onBack}>\n <IconFont type=\"authing-back\" />\n <span>{t('common.backToMFA')}</span>\n </span>\n </div>\n <div className=\"g2-view-tabs g2-mfa-totp-download-tabs\">\n <Tabs defaultActiveKey={DownloadType.IOS}>{renderTab}</Tabs>\n </div>\n </div>\n )\n}\n","import React, { useMemo, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Button } from 'antd'\nimport { IconFont } from '../../IconFont'\nimport { GuardMFAInitData, MFAType } from '../props'\nimport { i18n } from '../../_utils/locales'\nimport './style.less'\n\nexport interface MFAMethodsProps {\n applicationMfa: GuardMFAInitData['applicationMfa']\n method: MFAType\n onChangeMethod: (type: MFAType) => void\n}\n\nconst methodTitleMapping: Record<\n MFAType,\n {\n title: () => string\n icon: string\n }\n> = {\n [MFAType.EMAIL]: {\n title: () => i18n.t('common.EmailVerification'),\n icon: 'authing-mail',\n },\n [MFAType.SMS]: {\n title: () => i18n.t('common.SMS'),\n icon: 'authing-phone',\n },\n [MFAType.TOTP]: {\n title: () => i18n.t('common.OTPVerification'),\n icon: 'authing-totp',\n },\n [MFAType.FACE]: {\n title: () => i18n.t('common.faceVerification'),\n icon: 'authing-face',\n },\n}\n\nexport const MFAMethods: React.FC<MFAMethodsProps> = ({\n applicationMfa = [],\n method,\n onChangeMethod,\n}) => {\n const [currentMethod, setCurrentMethod] = useState(method)\n const { t } = useTranslation()\n\n const otherMethods = useMemo(\n () =>\n applicationMfa\n .filter((item) => item.mfaPolicy !== currentMethod)\n .sort((a, b) => a.sort - b.sort)\n .map((item) => (\n <Button\n className=\"g2-guard-mfa-methods-btn\"\n onClick={(e) => {\n onChangeMethod(item.mfaPolicy)\n setCurrentMethod(item.mfaPolicy)\n }}\n key={item.mfaPolicy}\n >\n <IconFont type={methodTitleMapping[item.mfaPolicy].icon} />\n {`${methodTitleMapping[item.mfaPolicy].title()}`}\n </Button>\n )),\n [applicationMfa, currentMethod, onChangeMethod]\n )\n\n return (\n <>\n {otherMethods.length !== 0 && (\n <>\n <div\n style={{\n minHeight: 32,\n }}\n />\n <div className=\"g2-mfa-method\">\n <div className=\"g2-mfa-method-title\">\n {t('login.otherVerifyWay')}\n </div>\n {otherMethods}\n </div>\n </>\n )}\n </>\n )\n}\n","import { GuardModuleAction, GuardModuleType } from '../Guard/module'\n\nexport const codeMap: Record<number, GuardModuleAction> = {\n // 待添加\n 2021: {\n action: 'changeModule',\n module: GuardModuleType.LOGIN,\n },\n 1700: {\n action: 'insideFix',\n message: 'verification failed, let components inside fix is fine.',\n },\n 1701: {\n action: 'insideFix',\n message: 'verification failed, let components inside fix is fine.',\n },\n 1702: {\n action: 'insideFix',\n message: 'verification failed, let components inside fix is fine.',\n },\n 500: {\n action: 'message',\n },\n}\n","import React, { useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { GuardModuleType } from '../Guard/module'\nimport { IconFont } from '../IconFont'\nimport { MFAEmail } from './core/email'\nimport { MFASms } from './core/sms'\nimport { MFAFace } from './core/face'\nimport { MFATotp } from './core/totp'\nimport { MFAMethods } from './mfaMethods'\nimport { GuardMFAViewProps, MFAType } from './props'\nimport { useAuthClient } from '../Guard/authClient'\nimport { codeMap } from './codemap'\nimport './styles.less'\nimport { message } from 'antd'\nconst window: Window = require('global/window')\n\nconst ComponentsMapping: Record<MFAType, (props: any) => React.ReactNode> = {\n [MFAType.EMAIL]: ({ config, initData, mfaLogin }) => (\n <MFAEmail\n config={config}\n mfaToken={initData.mfaToken}\n email={initData.email}\n mfaLogin={mfaLogin}\n />\n ),\n [MFAType.SMS]: ({ config, initData, mfaLogin }) => (\n <MFASms\n config={config}\n mfaToken={initData.mfaToken}\n phone={initData.phone}\n mfaLogin={mfaLogin}\n />\n ),\n [MFAType.TOTP]: ({ initData, config, changeModule, mfaLogin }) => (\n <MFATotp\n changeModule={changeModule}\n config={config}\n initData={initData}\n mfaLogin={mfaLogin}\n />\n ),\n [MFAType.FACE]: ({ config, initData, mfaLogin, setShowMethods }) => (\n <MFAFace\n config={config}\n initData={initData}\n mfaLogin={mfaLogin}\n setShowMethods={setShowMethods}\n />\n ),\n}\n\nexport const GuardMFAView: React.FC<GuardMFAViewProps> = ({\n initData,\n config,\n __changeModule,\n onLogin,\n}) => {\n const [currentMethod, setCurrentMethod] = useState(\n initData.current ??\n initData.applicationMfa?.sort((a, b) => a.sort - b.sort)[0].mfaPolicy\n )\n const [showMethods, setShowMethods] = useState(true)\n const client = useAuthClient()\n const { t } = useTranslation()\n\n const onBack = () => window.history.back()\n\n const __codePaser = (code: number) => {\n const action = codeMap[code]\n if (code === 200) {\n return (data: any) => {\n onLogin?.(data, client) // 登录成功\n }\n }\n\n if (!action) {\n return () => {\n console.error('not catch code', code)\n // props.onLoginError?.(data, client) // 未捕获 code\n }\n }\n\n // 解析成功\n if (action?.action === 'changeModule') {\n let m = action.module ? action.module : GuardModuleType.ERROR\n return (initData?: any) => __changeModule?.(m, initData)\n }\n if (action?.action === 'insideFix') {\n return () => {}\n }\n\n if (action?.action === 'message') {\n return (data: any) => {\n message.error(data.message)\n }\n }\n\n // 最终结果\n return () => {\n // props.onLoginError?.(data, client!) // 未捕获 code\n console.error('last action at mfaview')\n }\n }\n\n const mfaLogin = (code: any, data: any, message?: string) => {\n const callback = __codePaser?.(code)\n\n if (!data) {\n data = {}\n }\n data.__message = message\n callback?.(data)\n }\n\n return (\n <div className=\"g2-view-container\">\n <div className=\"g2-view-back\">\n <span onClick={onBack}>\n <IconFont type=\"authing-back\" />\n <span>{t('common.backLoginPage')}</span>\n </span>\n </div>\n <div className=\"g2-mfa-content\">\n {ComponentsMapping[currentMethod]({\n config: config,\n initData: initData,\n changeModule: __changeModule,\n mfaLogin: mfaLogin,\n setShowMethods: setShowMethods,\n })}\n </div>\n {showMethods && (\n <MFAMethods\n applicationMfa={initData.applicationMfa}\n method={currentMethod}\n onChangeMethod={(type) => {\n setCurrentMethod(type)\n }}\n />\n )}\n </div>\n )\n}\n","import React, { FC, useState, useMemo, useEffect } from 'react'\nimport { Space, Checkbox } from 'antd'\nimport './style.less'\nimport { getClassnames } from '../../../_utils'\nimport { Agreement } from '../../../AuthingGuard/api'\n\nexport interface AgreementsProps {\n value?: boolean\n onChange?: (value: boolean) => void\n style?: React.CSSProperties\n agreements: Agreement[]\n showError?: boolean\n}\n\nexport const Agreements: FC<AgreementsProps> = ({\n showError,\n onChange = () => {},\n style,\n agreements,\n}) => {\n const [acceptList, setAcceptList] = useState<(string | number)[]>([])\n\n const toggleItemCheck = (id: string | number) => {\n setAcceptList((prev) => {\n if (prev.includes(id)) {\n return prev.filter((item) => item !== id)\n }\n return [...prev, id]\n })\n }\n\n /** 是否可以注册 */\n const isAccept = useMemo(() => {\n /** 所有必须勾选的都勾了就可以通过 */\n return agreements\n .filter((item) => item.required)\n .every((item) => acceptList.includes(item.id))\n }, [acceptList, agreements])\n\n useEffect(() => {\n onChange(isAccept)\n }, [isAccept, onChange])\n\n return (\n <div\n className={getClassnames([\n 'authing-agreements',\n showError && 'authing-agreements-error',\n ])}\n >\n {agreements.map((item) => {\n return (\n <div\n key={item.id}\n style={{ ...style }}\n className={getClassnames([\n 'authing-agreements-item',\n item.required &&\n !acceptList.includes(item.id) &&\n 'authing-agreements-item-invalid',\n ])}\n onClick={() => toggleItemCheck(item.id)}\n >\n <Space align=\"start\" size={5}>\n <Checkbox\n className=\"authing-agreements-checkbox\"\n checked={acceptList.includes(item.id)}\n />\n <div\n className=\"authing-agreements-item-content\"\n dangerouslySetInnerHTML={{\n __html: item.title,\n }}\n ></div>\n </Space>\n </div>\n )\n })}\n </div>\n )\n}\n","import { LockOutlined, UserOutlined } from '@ant-design/icons'\nimport { Form, Input, message } from 'antd'\nimport { Rule } from 'antd/lib/form'\nimport { RegisterMethods } from 'authing-js-sdk'\nimport React, { useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useAsyncFn } from 'react-use'\nimport { Agreement, ApplicationConfig } from '../../AuthingGuard/api'\nimport { useAuthClient } from '../../Guard/authClient'\nimport {\n getDeviceName,\n getPasswordValidate,\n getUserRegisterParams,\n} from '../../_utils'\nimport { Agreements } from '../components/Agreements'\nimport SubmitButton from '../../SubmitButton'\nimport {\n EmailFormItem,\n ICheckProps,\n ValidatorFormItemProps,\n} from '../../ValidatorRules'\n\nexport interface RegisterWithEmailProps {\n onRegister: Function\n onBeforeRegister?: Function\n publicConfig?: ApplicationConfig\n agreements: Agreement[]\n}\n\nexport const RegisterWithEmail: React.FC<RegisterWithEmailProps> = ({\n onRegister,\n onBeforeRegister,\n agreements,\n publicConfig,\n}) => {\n const { t } = useTranslation()\n const submitButtonRef = useRef<any>(null)\n\n const authClient = useAuthClient()\n const [form] = Form.useForm()\n\n const [acceptedAgreements, setAcceptedAgreements] = useState(false)\n const [validated, setValidated] = useState(false)\n const ref = useRef<ICheckProps>(null)\n\n const [, onFinish] = useAsyncFn(\n async (values: any) => {\n if (onBeforeRegister) {\n try {\n const canRegister = await onBeforeRegister(\n {\n type: RegisterMethods.Phone,\n data: {\n phone: values.phone,\n password: values.password,\n code: values.code,\n },\n },\n authClient\n )\n if (!canRegister) {\n submitButtonRef.current.onSpin(false)\n return\n }\n } catch (e: any) {\n if (typeof e === 'string') {\n message.error(e)\n } else {\n message.error(e?.message)\n }\n submitButtonRef.current.onSpin(false)\n return\n }\n }\n\n try {\n await form.validateFields()\n setValidated(true)\n if (agreements?.length && !acceptedAgreements) {\n submitButtonRef.current.onSpin(false)\n return\n }\n const { email, password } = values\n\n // 注册\n const user = await authClient.registerByEmail(\n email,\n password,\n {\n browser:\n typeof navigator !== 'undefined' ? navigator.userAgent : null,\n device: getDeviceName(),\n },\n {\n generateToken: true,\n params: getUserRegisterParams(),\n }\n )\n submitButtonRef.current.onSpin(false)\n onRegister(200, user)\n } catch (error) {\n const { code, data, message } = error\n submitButtonRef.current.onError()\n\n onRegister(code, data, message)\n } finally {\n submitButtonRef.current.onSpin(false)\n }\n },\n [form, acceptedAgreements],\n { loading: false }\n )\n\n const formItems: {\n component: React.ReactNode\n name: string\n rules?: Rule[]\n FormItemFC?: React.ForwardRefExoticComponent<\n ValidatorFormItemProps & React.RefAttributes<ICheckProps>\n >\n }[] = [\n {\n component: (\n <Input\n className=\"authing-g2-input\"\n autoComplete=\"email\"\n size=\"large\"\n placeholder={t('login.inputEmail')}\n prefix={<UserOutlined style={{ color: '#878A95' }} />}\n />\n ),\n name: 'email',\n FormItemFC: EmailFormItem,\n },\n {\n component: (\n <Input.Password\n className=\"authing-g2-input\"\n size=\"large\"\n placeholder={t('login.inputPwd')}\n prefix={<LockOutlined style={{ color: '#878A95' }} />}\n />\n ),\n name: 'password',\n rules: [\n {\n validator(_, value) {\n if ((value ?? '').indexOf(' ') !== -1) {\n return Promise.reject(t('common.checkPasswordHasSpace'))\n }\n return Promise.resolve()\n },\n },\n ...getPasswordValidate(\n publicConfig?.passwordStrength,\n publicConfig?.customPasswordStrength\n ),\n ],\n },\n {\n component: (\n <Input.Password\n className=\"authing-g2-input\"\n size=\"large\"\n placeholder={t('common.passwordAgain')}\n prefix={<LockOutlined style={{ color: '#878A95' }} />}\n />\n ),\n name: 'new-password',\n rules: [\n ...getPasswordValidate(\n publicConfig?.passwordStrength,\n publicConfig?.customPasswordStrength\n ),\n {\n validator: (_, value) => {\n if (value !== form.getFieldValue('password')) {\n return Promise.reject(t('common.repeatPasswordDoc'))\n } else {\n return Promise.resolve()\n }\n },\n },\n ],\n },\n ]\n\n return (\n <div className=\"authing-g2-register-email\">\n <Form\n form={form}\n name=\"emailRegister\"\n autoComplete=\"off\"\n onFinish={(values: any) => {\n submitButtonRef.current.onSpin(true)\n onFinish(values)\n }}\n onFinishFailed={() => submitButtonRef.current.onError()}\n onValuesChange={(values) => {\n ref.current?.check(values)\n }}\n >\n {formItems.map((item) =>\n item.FormItemFC ? (\n <item.FormItemFC\n ref={ref}\n key={item.name}\n name={item.name}\n className=\"authing-g2-input-form\"\n validateFirst={true}\n userPoolId={publicConfig?.userPoolId!}\n form={form}\n checkRepeat={true}\n >\n {item.component}\n </item.FormItemFC>\n ) : (\n <Form.Item\n key={item.name}\n name={item.name}\n rules={item.rules}\n className=\"authing-g2-input-form\"\n validateFirst={true}\n >\n {item.component}\n </Form.Item>\n )\n )}\n {Boolean(agreements?.length) && (\n <Agreements\n onChange={setAcceptedAgreements}\n agreements={agreements}\n showError={validated}\n />\n )}\n <Form.Item>\n <SubmitButton text={t('common.register')} ref={submitButtonRef} />\n </Form.Item>\n </Form>\n </div>\n )\n}\n","import { SafetyOutlined, UserOutlined } from '@ant-design/icons'\nimport { Form } from 'antd'\nimport React, { useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useAsyncFn } from 'react-use'\nimport { Agreement, ApplicationConfig } from '../../AuthingGuard/api'\nimport { useAuthClient } from '../../Guard/authClient'\nimport { SendCode } from '../../SendCode'\nimport {\n fieldRequiredRule,\n getDeviceName,\n getUserRegisterParams,\n} from '../../_utils'\nimport { Agreements } from '../components/Agreements'\nimport SubmitButton from '../../SubmitButton'\nimport { InputNumber } from '../../InputNumber'\nimport {\n ICheckProps,\n PhoneFormItem,\n ValidatorFormItemProps,\n} from '../../ValidatorRules'\nimport { Rule } from 'antd/lib/form'\n\nexport interface RegisterWithPhoneProps {\n onRegister: Function\n agreements: Agreement[]\n publicConfig?: ApplicationConfig\n}\n\nexport const RegisterWithPhone: React.FC<RegisterWithPhoneProps> = ({\n onRegister,\n agreements,\n publicConfig,\n}) => {\n const { t } = useTranslation()\n const submitButtonRef = useRef<any>(null)\n const authClient = useAuthClient()\n const [form] = Form.useForm()\n const [phone, setPhone] = useState<string>('')\n const [acceptedAgreements, setAcceptedAgreements] = useState(false)\n const [validated, setValidated] = useState(false)\n\n const ref = useRef<ICheckProps>(null)\n\n const verifyCodeLength = publicConfig?.verifyCodeLength ?? 4\n\n const [, onFinish] = useAsyncFn(\n async (values: any) => {\n try {\n submitButtonRef.current.onSpin(true)\n await form.validateFields()\n\n setValidated(true)\n\n if (agreements?.length && !acceptedAgreements) {\n return\n }\n\n const { phone, password = '', code } = values\n\n // 注册\n const user = await authClient.registerByPhoneCode(\n phone,\n code,\n password,\n {\n browser:\n typeof navigator !== 'undefined' ? navigator.userAgent : null,\n device: getDeviceName(),\n },\n {\n generateToken: true,\n params: getUserRegisterParams(),\n }\n )\n\n submitButtonRef.current.onSpin(false)\n onRegister(200, user)\n } catch ({ code, data, message }) {\n submitButtonRef.current.onSpin(false)\n onRegister(code, data, message)\n }\n },\n [form],\n { loading: false }\n )\n\n const formItems: {\n component: React.ReactNode\n name: string\n rules?: Rule[]\n FormItemFC?: React.ForwardRefExoticComponent<\n ValidatorFormItemProps & React.RefAttributes<ICheckProps>\n >\n }[] = [\n {\n component: (\n <InputNumber\n className=\"authing-g2-input\"\n onChange={(e) => {\n setPhone(e.target.value)\n }}\n size=\"large\"\n placeholder={t('login.inputPhone')}\n prefix={<UserOutlined style={{ color: '#878A95' }} />}\n maxLength={11}\n />\n ),\n name: 'phone',\n FormItemFC: PhoneFormItem,\n },\n {\n component: (\n <SendCode\n className=\"authing-g2-input\"\n autoComplete=\"one-time-code\"\n size=\"large\"\n placeholder={t('common.inputFourVerifyCode', {\n length: verifyCodeLength,\n })}\n maxLength={verifyCodeLength}\n prefix={<SafetyOutlined style={{ color: '#878A95' }} />}\n method=\"phone\"\n onSendCodeBefore={() => form.validateFields(['phone'])}\n data={phone}\n />\n ),\n name: 'code',\n rules: fieldRequiredRule(t('common.captchaCode')),\n },\n ]\n\n return (\n <div className=\"authing-g2-register-email\">\n <Form\n form={form}\n name=\"emailRegister\"\n autoComplete=\"off\"\n onFinish={onFinish}\n onFinishFailed={() => submitButtonRef.current.onError()}\n onValuesChange={(values) => {\n ref.current?.check(values)\n }}\n >\n {formItems.map((item) =>\n item.FormItemFC ? (\n <item.FormItemFC\n ref={ref}\n key={item.name}\n name={item.name}\n className=\"authing-g2-input-form\"\n validateFirst={true}\n userPoolId={publicConfig?.userPoolId!}\n form={form}\n checkRepeat={true}\n >\n {item.component}\n </item.FormItemFC>\n ) : (\n <Form.Item\n key={item.name}\n name={item.name}\n rules={item.rules}\n className=\"authing-g2-input-form\"\n validateFirst={true}\n >\n {item.component}\n </Form.Item>\n )\n )}\n {Boolean(agreements?.length) && (\n <Agreements\n onChange={setAcceptedAgreements}\n agreements={agreements}\n showError={validated}\n />\n )}\n <Form.Item>\n <SubmitButton text={t('common.register')} ref={submitButtonRef} />\n </Form.Item>\n </Form>\n </div>\n )\n}\n","import { ErrorCode } from '../_utils/GuardErrorCode'\nimport { GuardModuleAction } from '../Guard/module'\n\nexport const codeMap: Record<number, GuardModuleAction> = {\n [ErrorCode.USER_EXISTENCE]: {\n action: 'message',\n },\n // 频繁注册\n 1002: {\n action: 'message',\n },\n}\n","import React, { useMemo } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { message, Tabs } from 'antd'\nimport { RegisterMethods, User } from 'authing-js-sdk'\nimport { ChangeLanguage } from '../ChangeLanguage'\nimport { useAuthClient } from '../Guard/authClient'\nimport { GuardModuleType } from '../Guard/module'\nimport { RegisterWithEmail } from './core/WithEmail'\nimport { RegisterWithPhone } from './core/WithPhone'\nimport { GuardRegisterViewProps } from './props'\nimport { codeMap } from './codemap'\n\nexport const GuardRegisterView: React.FC<GuardRegisterViewProps> = ({\n config,\n onLangChange,\n __changeModule,\n ...registerEvents\n}) => {\n const { t } = useTranslation()\n const agreementEnabled = config?.agreementEnabled\n const { langRange } = config\n const authClient = useAuthClient()\n\n const __codePaser = (code: number) => {\n const action = codeMap[code]\n\n if (code === 200) {\n return (user: User) => {\n // TODO 用户信息补全 等待后端接口修改\n if (config.__publicConfig__!.extendsFieldsEnabled) {\n __changeModule?.(GuardModuleType.COMPLETE_INFO, {})\n } else {\n registerEvents.onRegister?.(user, authClient)\n __changeModule?.(GuardModuleType.LOGIN, {})\n }\n }\n }\n\n if (!action) {\n return (initData?: any) => {\n message.error(initData?._message)\n console.error('未捕获 code', code)\n }\n }\n\n if (action?.action === 'message') {\n return (initData?: any) => {\n message.error(initData?._message)\n }\n }\n }\n\n const registerContextProps = useMemo(\n () => ({\n onRegister: (code: number, data: any = {}, message?: string) => {\n const callback = __codePaser(code)\n\n if (code !== 200) {\n registerEvents.onRegisterError?.({\n code,\n data,\n message,\n })\n }\n\n callback?.({\n ...data,\n _message: message,\n })\n },\n onBeforeRegister: registerEvents.onBeforeRegister,\n agreements: agreementEnabled ? config?.agreements ?? [] : [],\n publicConfig: config.__publicConfig__,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [agreementEnabled, config?.agreements, registerEvents.onBeforeRegister]\n )\n\n const tabMapping: Record<\n RegisterMethods,\n { component: React.ReactNode; name: string }\n > = useMemo(\n () => ({\n [RegisterMethods.Email]: {\n component: <RegisterWithEmail {...registerContextProps} />,\n name: t('common.emailLabel'),\n },\n [RegisterMethods.Phone]: {\n component: <RegisterWithPhone {...registerContextProps} />,\n name: t('common.phoneLabel'),\n },\n }),\n [registerContextProps, t]\n )\n\n const renderTab = useMemo(\n () =>\n config?.registerMethods?.map((method) => (\n <Tabs.TabPane tab={tabMapping[method].name} key={method}>\n {tabMapping[method].component}\n </Tabs.TabPane>\n )),\n [config?.registerMethods, tabMapping]\n )\n\n return (\n <div className=\"g2-view-container\">\n <div className=\"g2-view-header\">\n <img src={config?.logo} alt=\"\" className=\"icon\" />\n\n <div className=\"title\">\n {t('common.welcomeJoin', { name: config?.title })}\n </div>\n </div>\n <div className=\"g2-view-tabs\">\n <Tabs\n defaultActiveKey={config?.defaultRegisterMethod}\n onChange={(activeKey) => {\n registerEvents.onRegisterTabChange?.(activeKey as RegisterMethods)\n }}\n >\n {renderTab}\n </Tabs>\n </div>\n <div className=\"g2-tips-line\">\n <span className=\"back-to-login\">\n <span className=\"gray\">{t('common.alreadyHasAcc')}</span>\n <span\n className=\"link-like\"\n onClick={() => __changeModule?.(GuardModuleType.LOGIN, {})}\n >\n {t('common.backLoginPage')}\n </span>\n </span>\n </div>\n <ChangeLanguage langRange={langRange} onLangChange={onLangChange} />\n </div>\n )\n}\n","import { useEffect } from 'react'\nimport { GuardComponentConifg, GuardLocalConfig } from './config'\nimport { GuardModuleType } from './module'\nconst window: Window = require('global/window')\n\nexport interface ModuleState {\n moduleName: GuardModuleType\n initData?: any\n}\n\nexport enum ActionType {\n ChangeModule = 'ChangeModule',\n Back = 'Back',\n Init = 'Init',\n}\n\nexport interface StateMachineLog {\n action: ActionType\n date: number\n dataSource: ModuleState\n}\n\nexport type ChangeModuleEvent = (\n nextModelu: GuardModuleType,\n initData?: any\n) => void\nexport class GuardStateMachine {\n // 计数器\n private order: number = 0\n\n // 总体的配置信息\n private config: GuardComponentConifg = {}\n\n // 历史记录\n private moduleStateHistory: ModuleState[] = []\n\n private changeMouleEvent: ChangeModuleEvent\n\n // Log\n private stateMachineLog: Record<number, StateMachineLog> = {}\n\n constructor(changeMouleEvent: ChangeModuleEvent, initData: ModuleState) {\n this.changeMouleEvent = changeMouleEvent\n\n this.historyPush(initData, ActionType.Init)\n }\n globalWindow = (): Window | undefined =>\n typeof window !== undefined ? window : undefined\n\n next = (nextModelu: GuardModuleType, initData: any) => {\n const moduleData: ModuleState = {\n moduleName: nextModelu,\n initData,\n }\n this.changeMouleEvent(nextModelu, initData)\n\n this.historyPush(moduleData)\n console.log('next Log', this.stateMachineLog)\n console.log('next History', this.moduleStateHistory)\n }\n\n back = (initData: any = {}) => {\n if (this.moduleStateHistory.length <= 1) return\n\n const backModule = this.moduleStateHistory[1]\n this.changeMouleEvent(backModule.moduleName, {\n ...initData,\n ...backModule.initData,\n })\n\n this.moduleStateHistory.splice(0, 1)\n console.log('back Log', this.stateMachineLog)\n }\n\n // 业务终点 Log 发送\n end = () => {\n console.log('业务终点 Log', this.stateMachineLog)\n\n // TODO 请求\n }\n\n historyPush = (\n data: ModuleState,\n actionType: ActionType = ActionType.ChangeModule\n ) => {\n this.moduleStateHistory.unshift(data)\n\n this.stateMachineLog[this.order++] = {\n action: actionType,\n date: new Date().getTime(),\n dataSource: data,\n }\n\n if (this.moduleStateHistory.length > 10)\n this.moduleStateHistory.splice(10, this.moduleStateHistory.length - 10)\n }\n\n historyBack = (data: ModuleState) => {\n if (this.moduleStateHistory.length <= 1) return\n\n this.moduleStateHistory.splice(0, 1)\n\n this.stateMachineLog[this.order++] = {\n action: ActionType.Back,\n date: new Date().getTime(),\n dataSource: data,\n }\n }\n\n setConfig = (config: GuardLocalConfig) => {\n this.config = config\n }\n}\n\nexport const useHistoryHijack = (back?: () => void) => {\n const next = (state: any = {}) => {\n window?.history.pushState(state, '', window?.location.href)\n }\n\n useEffect(() => {\n const onPopstate = () => {\n back?.()\n }\n\n back && window?.addEventListener('popstate', onPopstate)\n\n return () => {\n back && window.removeEventListener('popstate', onPopstate)\n }\n }, [back])\n\n return [next]\n}\n","import { message } from 'antd'\nimport { User } from 'authing-js-sdk'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport { useAsyncFn } from 'react-use'\nimport { ErrorCode } from '../_utils/GuardErrorCode'\nimport { useGuardHttp } from '../_utils/guradHttp'\nimport { useAuthClient } from '../Guard/authClient'\nimport { GuardModuleType } from '../Guard/module'\nimport { IconFont } from '../IconFont'\nimport { ShieldSpin, Spin } from '../ShieldSpin'\nimport { BindSuccess } from './core/bindSuccess'\nimport { SecurityCode } from './core/securityCode'\nimport { GuardBindTotpViewProps } from './interface'\nimport { useTranslation } from 'react-i18next'\nimport './styles.less'\nconst window: Window = require('global/window')\n\nenum BindTotpType {\n SECURITY_CODE = 'securityCode',\n BIND_SUCCESS = 'bindSuccess',\n}\n\nexport const GuardBindTotpView: React.FC<GuardBindTotpViewProps> = ({\n config: GuardLocalConfig,\n initData,\n onLogin,\n __changeModule,\n}) => {\n const { get, post } = useGuardHttp()\n const { t } = useTranslation()\n const [secret, setSecret] = useState('')\n const [qrcode, setQrcode] = useState('')\n const [user, setUser] = useState<User>()\n const [bindTotpType, setBindTotpType] = useState<BindTotpType>(\n BindTotpType.SECURITY_CODE\n )\n\n const authClient = useAuthClient()\n\n const [bindInfo, fetchBindInfo] = useAsyncFn(async () => {\n const query = {\n type: 'totp',\n source: 'APPLICATION',\n }\n const config = {\n headers: {\n authorization: initData.mfaToken,\n },\n }\n\n try {\n const { data } = await get<any>(\n `/api/v2/mfa/authenticator`,\n query,\n config\n )\n\n if (data.code === ErrorCode.LOGIN_INVALID) {\n message.error(data.message)\n __changeModule?.(GuardModuleType.LOGIN, {})\n return\n }\n } catch (error: any) {\n message.error(error?.message)\n }\n\n const { data } = await post<any>(\n '/api/v2/mfa/totp/associate',\n query,\n config\n )\n\n setSecret(data.recovery_code)\n setQrcode(data.qrcode_data_url)\n }, [initData.mfaToken])\n\n const onBind = () => {\n if (user) onLogin?.(user, authClient)\n }\n\n const onNext = (user: User) => {\n setUser(user)\n setBindTotpType(BindTotpType.BIND_SUCCESS)\n }\n\n useEffect(() => {\n fetchBindInfo()\n }, [fetchBindInfo])\n\n const renderContent = useMemo<\n Record<BindTotpType, (props: any) => React.ReactNode>\n >(\n () => ({\n [BindTotpType.SECURITY_CODE]: (props) => <SecurityCode {...props} />,\n [BindTotpType.BIND_SUCCESS]: (props) => <BindSuccess {...props} />,\n }),\n []\n )\n\n const onBack = () => {\n window.history.back()\n }\n\n return (\n <>\n {bindInfo.loading ? (\n <Spin />\n ) : (\n <div className=\"g2-view-container\">\n <div className=\"g2-view-back\">\n <span onClick={onBack}>\n <IconFont type=\"authing-back\" />\n <span>{t('common.backToVerify')}</span>\n </span>\n </div>\n <div className=\"g2-mfa-content g2-mfa-bindTotp\">\n {bindInfo.loading ? (\n <ShieldSpin />\n ) : (\n renderContent[bindTotpType]({\n mfaToken: initData.mfaToken,\n qrcode,\n secret,\n onBind,\n onNext,\n changeModule: __changeModule,\n })\n )}\n </div>\n </div>\n )}\n </>\n )\n}\n","import { Form, Checkbox, Typography } from 'antd'\nimport React, { useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport SubmitButton from '../../SubmitButton'\n\nconst { Paragraph } = Typography\n\nexport interface BindSuccessProps {\n onBind: any\n secret: string\n}\n\nexport const BindSuccess: React.FC<BindSuccessProps> = ({ secret, onBind }) => {\n // const [isSaved, setIsSaved] = useState(false)\n const submitButtonRef = useRef<any>(null)\n const [form] = Form.useForm()\n\n const { t } = useTranslation()\n\n const bindSuccess = async () => {\n submitButtonRef.current?.onSpin(true)\n try {\n await form.validateFields()\n onBind()\n } catch (e: any) {\n submitButtonRef.current?.onError()\n } finally {\n submitButtonRef.current?.onSpin(false)\n }\n }\n\n return (\n <>\n <p className=\"authing-g2-mfa-title\">{t('common.totpText1')}</p>\n <p className=\"authing-g2-mfa-tips\">{t('common.totpText2')}</p>\n\n <div className=\"g2-mfa-bindTotp-copySecret\">\n <Paragraph copyable>{secret}</Paragraph>\n </div>\n\n <Form\n form={form}\n onFinish={bindSuccess}\n style={{ width: '100%' }}\n onFinishFailed={() => submitButtonRef.current?.onError()}\n >\n <Form.Item\n className=\"authing-g2-input-form g2-mfa-totp-verify-input\"\n name=\"remember\"\n rules={[\n {\n validator: (_, value) => {\n console.log(value)\n if (!value) {\n return Promise.reject(t('common.pleaseRecordKey'))\n }\n return Promise.resolve()\n },\n },\n ]}\n valuePropName=\"checked\"\n >\n <Checkbox className=\"g2-mfa-bindTotp-secretSave\">\n {t('login.rememberedSecret')}\n </Checkbox>\n </Form.Item>\n\n <SubmitButton text={t('common.bindSuccess')} ref={submitButtonRef} />\n </Form>\n </>\n )\n}\n","import { Form, message } from 'antd'\nimport React, { useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useAsyncFn } from 'react-use'\n\nimport { GuardModuleType } from '../../Guard/module'\nimport { useGuardHttp } from '../../_utils/guradHttp'\nimport SubmitButton from '../../SubmitButton'\nimport { ImagePro } from '../../ImagePro'\nimport { VerifyCodeFormItem } from '../../MFA/VerifyCodeInput/VerifyCodeFormItem'\nimport { VerifyCodeInput } from '../../MFA/VerifyCodeInput'\nexport interface SecurityCodeProps {\n mfaToken: string\n qrcode: string\n onNext: any\n changeModule: any\n}\n\nexport const SecurityCode: React.FC<SecurityCodeProps> = ({\n mfaToken,\n qrcode,\n onNext,\n changeModule,\n}) => {\n const [form] = Form.useForm()\n const submitButtonRef = useRef<any>(null)\n\n const { t } = useTranslation()\n\n const { post } = useGuardHttp()\n\n const onJump = () => {\n changeModule?.(GuardModuleType.DOWNLOAD_AT)\n }\n\n const [, bindTotp] = useAsyncFn(async () => {\n submitButtonRef.current.onSpin(true)\n\n try {\n await form.validateFields()\n const saftyCode = form.getFieldValue('saftyCode')\n\n const { code, data, message: resMessage } = await post(\n '/api/v2/mfa/totp/associate/confirm',\n {\n authenticator_type: 'totp',\n totp: saftyCode.join(''),\n source: 'APPLICATION',\n },\n {\n headers: {\n authorization: mfaToken,\n },\n }\n )\n\n if (code !== 200) {\n submitButtonRef.current.onError()\n message.error(resMessage)\n } else {\n onNext(data)\n }\n } catch (e: any) {\n submitButtonRef.current.onError()\n } finally {\n submitButtonRef.current?.onSpin(false)\n }\n }, [mfaToken])\n\n return (\n <>\n <p className=\"authing-g2-mfa-title\">{t('user.mfaBind')}</p>\n <p\n className=\"authing-g2-mfa-tips\"\n style={{\n textAlign: 'left',\n }}\n >\n {t('common.usePhoneOpen')} Google Authenticator or Microsoft\n Authenticator({t('common.noValidator')}{' '}\n <span\n style={{\n color: '#396AFF',\n cursor: 'pointer',\n }}\n onClick={onJump}\n >\n {t('common.clickTodownload')}\n </span>\n ) {t('common.mfaText1')}\n </p>\n <ImagePro className=\"g2-mfa-bindTotp-qrcode\" src={qrcode} alt=\"qrcode\" />\n <Form\n className=\"g2-mfa-bindTotp-securityCode-form\"\n form={form}\n onSubmitCapture={() => {}}\n onFinish={bindTotp}\n onFinishFailed={() => submitButtonRef.current.onError()}\n >\n <VerifyCodeFormItem codeLength={6} name=\"saftyCode\">\n <VerifyCodeInput length={6} showDivider={true} gutter={'10px'} />\n </VerifyCodeFormItem>\n <p>{t('user.numberSafteyCode')}</p>\n <SubmitButton text={t('user.nextStep')} ref={submitButtonRef} />\n </Form>\n </>\n )\n}\n","import React, { useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Form, Input } from 'antd'\nimport { StoreValue } from 'antd/lib/form/interface'\n\nimport { UserOutlined, SafetyOutlined, LockOutlined } from '@ant-design/icons'\nimport { SendCode } from '../../SendCode'\n\nimport { useAuthClient } from '../../Guard/authClient'\nimport { fieldRequiredRule, getPasswordValidate, validate } from '../../_utils'\nimport SubmitButton from '../../SubmitButton'\n\ninterface ResetPasswordProps {\n onReset: any\n publicConfig: any\n onSend: (type: 'email' | 'phone') => void\n onSendError: (type: 'email' | 'phone', error: any) => void\n}\nexport const ResetPassword = (props: ResetPasswordProps) => {\n const { t } = useTranslation()\n let [form] = Form.useForm()\n let [identify, setIdentify] = useState('')\n let [codeMethod, setCodeMethod] = useState<'phone' | 'email'>('phone')\n let client = useAuthClient()\n let submitButtonRef = useRef<any>(null)\n\n const verifyCodeLength = props.publicConfig.verifyCodeLength ?? 4\n\n const onFinish = async (values: any) => {\n let identify = values.identify\n let code = values.code\n let newPassword = values.password\n let context = new Promise(() => {})\n\n if (codeMethod === 'email') {\n context = client.resetPasswordByEmailCode(identify, code, newPassword)\n }\n if (codeMethod === 'phone') {\n context = client.resetPasswordByPhoneCode(identify, code, newPassword)\n }\n\n context\n .then((r) => {\n props.onSend(codeMethod)\n props.onReset(r)\n })\n .catch((e) => {\n props.onSendError(codeMethod, e)\n props.onReset(e)\n })\n }\n\n return (\n <div className=\"authing-g2-login-phone-code\">\n <Form\n name=\"resetPassword\"\n form={form}\n onFinish={onFinish}\n onFinishFailed={() => {\n submitButtonRef?.current?.onError()\n }}\n autoComplete=\"off\"\n >\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"identify\"\n validateFirst={true}\n rules={[\n ...fieldRequiredRule(t('common.account')),\n {\n validator: async (_, value: StoreValue) => {\n if (!value) {\n return\n }\n if (validate('email', value) || validate('phone', value)) {\n return\n } else {\n throw new Error(t('login.inputCorrectPhoneOrEmail'))\n }\n },\n },\n ]}\n >\n <Input\n className=\"authing-g2-input\"\n autoComplete=\"tel\"\n size=\"large\"\n placeholder={t('login.inputPhoneOrEmail')}\n value={identify}\n onChange={(e) => {\n let v = e.target.value\n setIdentify(v)\n if (validate('email', v)) {\n setCodeMethod('email')\n }\n if (validate('phone', v)) {\n setCodeMethod('phone')\n }\n }}\n prefix={<UserOutlined style={{ color: '#878A95' }} />}\n />\n </Form.Item>\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"code\"\n rules={[...fieldRequiredRule(t('common.captchaCode'))]}\n >\n <SendCode\n className=\"authing-g2-input\"\n autoComplete=\"one-time-code\"\n size=\"large\"\n placeholder={t('common.inputFourVerifyCode', {\n length: verifyCodeLength,\n })}\n prefix={<SafetyOutlined style={{ color: '#878A95' }} />}\n maxLength={verifyCodeLength}\n method={codeMethod}\n data={identify}\n onSendCodeBefore={async () => {\n await form.validateFields(['identify'])\n }}\n\n // form={form}\n />\n </Form.Item>\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"password\"\n validateFirst={true}\n rules={[\n {\n validator(_, value) {\n if ((value ?? '') && value.indexOf(' ') !== -1) {\n return Promise.reject(t('common.checkPasswordHasSpace'))\n }\n return Promise.resolve()\n },\n },\n ...getPasswordValidate(\n props.publicConfig?.passwordStrength,\n props.publicConfig?.customPasswordStrength\n ),\n ]}\n >\n <Input.Password\n className=\"authing-g2-input\"\n size=\"large\"\n placeholder={t('user.inputNewPwd')}\n prefix={<LockOutlined style={{ color: '#878A95' }} />}\n />\n </Form.Item>\n <Form.Item className=\"authing-g2-input-form submit-form\">\n <SubmitButton\n className=\"forget-password\"\n text={t('common.confirm')}\n ref={submitButtonRef}\n />\n </Form.Item>\n </Form>\n </div>\n )\n}\n","import React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { message } from 'antd'\n\nimport { GuardModuleType } from '../Guard/module'\nimport { ResetPassword } from './core/resetPassword'\n\nimport { ImagePro } from '../ImagePro'\nimport { ForgetPasswordViewProps } from './interface'\nimport { useAuthClient } from '../Guard/authClient'\nimport { CommonMessage } from '..'\n\nexport const GuardForgetPassword: React.FC<ForgetPasswordViewProps> = (\n props\n) => {\n const { t } = useTranslation()\n let publicConfig = props.config.__publicConfig__\n const authClient = useAuthClient()\n\n const onReset = (res: any) => {\n let code = res.code\n if (code !== 200) {\n props.onPwdResetError?.(res, authClient)\n message.error(res.message)\n return\n }\n props.onPwdReset?.(authClient)\n // 返回登录\n const initData = {\n title: t('common.resetSuccess'),\n message: t('common.resetSuccessMessage'),\n }\n props.__changeModule?.(GuardModuleType.SUBMIT_SUCCESS, { ...initData })\n }\n\n const onSend = (type: 'phone' | 'email') => {\n if (type === 'phone') props.onPwdPhoneSend?.(authClient)\n if (type === 'email') props.onPwdEmailSend?.(authClient)\n }\n const onSendError = (type: 'phone' | 'email', error: any) => {\n if (type === 'phone')\n props.onPwdPhoneSendError?.(error as CommonMessage, authClient)\n if (type === 'email')\n props.onPwdEmailSendError?.(error as CommonMessage, authClient)\n }\n\n return (\n <div className=\"g2-view-container\">\n <div className=\"g2-view-header\">\n <ImagePro\n src={props.config?.logo}\n size={48}\n borderRadius={4}\n alt=\"\"\n className=\"icon\"\n />\n <div className=\"title\">{t('login.resetPwd')}</div>\n <div className=\"title-explain\">{t('user.resetpasswordText1')}</div>\n </div>\n <div className=\"g2-view-tabs\">\n <ResetPassword\n onReset={onReset}\n publicConfig={publicConfig}\n onSend={onSend}\n onSendError={onSendError}\n />\n </div>\n <div className=\"g2-tips-line\">\n <div\n className=\"link-like back-to-login\"\n onClick={() => props.__changeModule?.(GuardModuleType.LOGIN)}\n >\n {t('common.backLoginPage')}\n </div>\n </div>\n </div>\n )\n}\n","import React, { useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Form, Input } from 'antd'\n\nimport { LockOutlined } from '@ant-design/icons'\n\nimport { useAuthClient } from '../../Guard/authClient'\nimport { getPasswordValidate } from '../../_utils'\nimport SubmitButton from '../../SubmitButton'\n\ninterface FirstLoginResetProps {\n onReset: any\n publicConfig: any\n initData: any\n}\nexport const FirstLoginReset = (props: FirstLoginResetProps) => {\n const { t } = useTranslation()\n let [form] = Form.useForm()\n let client = useAuthClient()\n let submitButtonRef = useRef<any>(null)\n\n const onFinish = async (values: any) => {\n let newPassword = values.password\n // let newPassword2 = values.password2\n let res = await client.resetPasswordByFirstLoginToken({\n token: props.initData.token,\n password: newPassword,\n })\n props.onReset(res)\n }\n\n return (\n <div className=\"authing-g2-login-phone-code\">\n <Form\n name=\"resetPassword\"\n form={form}\n onFinish={onFinish}\n onFinishFailed={() => {\n submitButtonRef?.current?.onError()\n }}\n autoComplete=\"off\"\n >\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"password\"\n rules={[\n {\n validator(_, value) {\n if (value && value.indexOf(' ') !== -1) {\n return Promise.reject(t('common.checkPasswordHasSpace'))\n }\n return Promise.resolve()\n },\n },\n ...getPasswordValidate(\n props.publicConfig?.passwordStrength,\n props.publicConfig?.customPasswordStrength\n ),\n ]}\n >\n <Input.Password\n className=\"authing-g2-input\"\n size=\"large\"\n placeholder={t('login.inputPwd')}\n prefix={<LockOutlined style={{ color: '#878A95' }} />}\n />\n </Form.Item>\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"password2\"\n rules={[\n {\n validator(_, value) {\n let pwd = form.getFieldValue('password')\n if (!value) {\n return Promise.reject(t('login.inputPwd'))\n }\n if (value !== pwd) {\n return Promise.reject(t('common.repeatPasswordDoc'))\n }\n return Promise.resolve()\n },\n },\n ]}\n >\n <Input.Password\n className=\"authing-g2-input\"\n size=\"large\"\n placeholder={t('login.inputPwdAgain')}\n prefix={<LockOutlined style={{ color: '#878A95' }} />}\n />\n </Form.Item>\n\n <Form.Item className=\"authing-g2-input-form submit-form\">\n <SubmitButton\n className=\"forget-password\"\n text={t('common.confirm')}\n ref={submitButtonRef}\n />\n </Form.Item>\n </Form>\n </div>\n )\n}\n","import React, { useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Form, Input } from 'antd'\n\nimport { LockOutlined } from '@ant-design/icons'\n\nimport { getPasswordValidate } from '../../_utils'\nimport SubmitButton from '../../SubmitButton'\n\ninterface RotateResetProps {\n onReset: any\n publicConfig: any\n initData: any\n}\n\nexport const RotateReset = (props: RotateResetProps) => {\n const { t } = useTranslation()\n let [form] = Form.useForm()\n // let client = useAuthClient()\n let submitButtonRef = useRef<any>(null)\n\n const onFinish = async (values: any) => {\n // let newPassword = values.password\n // let res = await client.resetPasswordByFirstLoginToken({\n // token: props.initData.token,\n // password: newPassword,\n // })\n // props.onReset(res)\n }\n\n return (\n <div className=\"authing-g2-login-phone-code\">\n <Form\n name=\"resetPassword\"\n form={form}\n onFinish={onFinish}\n onFinishFailed={() => {\n submitButtonRef?.current?.onError()\n }}\n autoComplete=\"off\"\n >\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"oldPassword\"\n rules={[{ required: true }]}\n >\n <Input.Password\n className=\"authing-g2-input\"\n size=\"large\"\n placeholder={t('user.inputCurrPwd')}\n prefix={<LockOutlined style={{ color: '#878A95' }} />}\n />\n </Form.Item>\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"password\"\n rules={[\n {\n validator(_, value) {\n if (value && value.indexOf(' ') !== -1) {\n return Promise.reject(t('common.checkPasswordHasSpace'))\n }\n return Promise.resolve()\n },\n },\n ...getPasswordValidate(\n props.publicConfig?.passwordStrength,\n props.publicConfig?.customPasswordStrength\n ),\n ]}\n >\n <Input.Password\n className=\"authing-g2-input\"\n size=\"large\"\n placeholder={t('login.inputPwd')}\n prefix={<LockOutlined style={{ color: '#878A95' }} />}\n />\n </Form.Item>\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"password2\"\n rules={[\n {\n validator(_, value) {\n let pwd = form.getFieldValue('password')\n if (!value) {\n return Promise.reject(t('login.inputPwd'))\n }\n if (value !== pwd) {\n return Promise.reject(t('common.repeatPasswordDoc'))\n }\n return Promise.resolve()\n },\n },\n ]}\n >\n <Input.Password\n className=\"authing-g2-input\"\n size=\"large\"\n placeholder={t('login.inputPwdAgain')}\n prefix={<LockOutlined style={{ color: '#878A95' }} />}\n />\n </Form.Item>\n <Form.Item className=\"authing-g2-input-form submit-form\">\n <SubmitButton\n className=\"forget-password\"\n text={t('common.confirm')}\n ref={submitButtonRef}\n />\n </Form.Item>\n </Form>\n </div>\n )\n}\n","import React from 'react'\nimport { GuardModuleType } from '../Guard/module'\nimport { ImagePro } from '../ImagePro'\nimport { FirstLoginReset } from './core/firstLoginReset'\nimport { RotateReset } from './core/rotateReset'\n\n// 手动修改密码,并非「忘记密码」\n// 进入的场景是读取配置:1开了首次登录修改密码 || 2开了密码轮换\nexport const GuardChangePassword = (props: any) => {\n let { initData, config } = props\n let publicConfig = config.__publicConfig__\n // let [resetType] = useState<'inital' | 'rotate'>(initData.type) //\n // console.log('******', initData.type)\n // let publicConfig = props.config.__publicConfig__\n\n const onReset = (res: any) => {\n let code = res.code\n if (code === 200) {\n // 返回登录\n props.__changeModule(GuardModuleType.LOGIN)\n } else {\n console.log('*** reset code no catched', res)\n }\n }\n\n return (\n <div className=\"g2-view-container\">\n <div className=\"g2-view-header\">\n <ImagePro\n src={config?.logo}\n size={48}\n borderRadius={4}\n alt=\"\"\n className=\"icon\"\n />\n <div className=\"title\">欢迎访问 {config.title}</div>\n <div className=\"title-explain\">\n 你的密码连续使用超过 xxx,可能存在风险。请重新设置密码。\n </div>\n </div>\n <div className=\"g2-view-tabs\">\n {initData.type === 'inital' && (\n <FirstLoginReset\n onReset={onReset}\n initData={initData}\n publicConfig={publicConfig}\n />\n )}\n {initData.type === 'rotate' && (\n <RotateReset\n onReset={onReset}\n initData={initData}\n publicConfig={publicConfig}\n />\n )}\n </div>\n </div>\n )\n}\n","import React, { useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { Form, Input, Modal, Select, Upload } from 'antd'\nimport SubmitButton from '../../SubmitButton'\nimport { UserOutlined, PlusOutlined } from '@ant-design/icons'\nimport { UploadFile } from 'antd/lib/upload/interface'\nimport { useGuardHttp } from '../../_utils/guradHttp'\nimport { fieldRequiredRule, validate } from '../../_utils'\n\ninterface describeQuestionsProps {\n appId: string\n host: string\n onSuccess: any\n}\n\nexport const DescribeQuestions = (props: describeQuestionsProps) => {\n const { t } = useTranslation()\n\n // 不清楚为什么放出去之后,i18n 的结果全是 undefeated\n const typeProblemMap: any = {\n 0: [\n t('common.problem.noVerifyTip.tip'),\n t('common.problem.noVerifyTip.type1'),\n t('common.problem.noVerifyTip.type2'),\n t('common.problem.noVerifyTip.type3'),\n ],\n 1: [\n t('common.problem.noLoginTip.tip'),\n t('common.problem.noLoginTip.type1'),\n t('common.problem.noLoginTip.type2'),\n ],\n 2: [\n t('common.problem.noRegisterTip.tip'),\n t('common.problem.noRegisterTip.type1'),\n t('common.problem.noRegisterTip.type2'),\n t('common.problem.noRegisterTip.type3'),\n ],\n 3: [\n t('common.problem.noAccountTip.tip'),\n t('common.problem.noAccountTip.type1'),\n t('common.problem.noAccountTip.type2'),\n ],\n 4: [\n t('common.problem.noResetPassTip.tip'),\n t('common.problem.noResetPassTip.type1'),\n t('common.problem.noResetPassTip.type2'),\n ],\n 5: [t('common.problem.otherTip.tip'), t('common.problem.otherTip.type1')],\n 6: [t('common.problem.otherTip.tip'), t('common.problem.otherTip.type1')],\n }\n\n const typeOperations = [\n {\n label: t('common.problem.noVerify'),\n value: 0,\n },\n {\n label: t('common.problem.noLogin'),\n value: 1,\n },\n {\n label: t('common.problem.noRegister'),\n value: 2,\n },\n {\n label: t('common.problem.noAccount'),\n value: 3,\n },\n {\n label: t('common.problem.noResetPass'),\n value: 4,\n },\n {\n label: t('common.problem.locked'),\n value: 5,\n },\n {\n label: t('common.problem.other'),\n value: 6,\n },\n ]\n\n const [form] = Form.useForm()\n const { post } = useGuardHttp()\n const [uploadUrl, setUploadUrl] = useState([])\n const [previewVisible, setPreviewVisible] = useState(false)\n const [previewImage, setPreviewImage] = useState()\n const [fileList, setFileList] = useState<UploadFile<any>[]>([])\n const [typeProblem, setTypeProblem] = useState(0)\n const submitButtonRef = useRef<any>(null)\n const textMap = typeProblemMap[typeProblem]\n\n const onFinish = (values: any) => {\n submitButtonRef?.current?.onSpin(true)\n const params = {\n type: typeProblem,\n description: values.description,\n phone: values.identify,\n images: uploadUrl,\n appId: props.appId,\n }\n let context = post('/api/v2/feedback', params)\n context.then((res) => {\n if (res.code === 200) {\n submitButtonRef?.current?.onSpin(false)\n props.onSuccess()\n }\n })\n }\n\n const handlePreview = async (file: any) => {\n // setPreviewImage(file.url);\n // file 没有 url 属性,需要改成下面的用法\n let url = file.response.data.url\n setPreviewImage(url)\n setPreviewVisible(true)\n }\n\n return (\n <div className=\"authing-g2-describe-questions\">\n <Form\n name=\"resetPassword\"\n layout=\"vertical\"\n form={form}\n onFinish={onFinish}\n onFinishFailed={() => {\n submitButtonRef?.current?.onError()\n }}\n autoComplete=\"off\"\n >\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"identify\"\n label={t('common.problem.form.phone')}\n validateFirst={true}\n rules={[\n ...fieldRequiredRule(t('common.problem.form.phone')),\n {\n validator: async (_, value) => {\n if (!value) {\n return\n }\n if (validate('email', value) || validate('phone', value)) {\n return\n } else {\n throw new Error(t('login.inputCorrectPhoneOrEmail'))\n }\n },\n },\n ]}\n >\n <Input\n className=\"authing-g2-input\"\n autoComplete=\"tel\"\n size=\"large\"\n placeholder={t('login.inputPhoneOrEmail')}\n prefix={<UserOutlined style={{ color: '#878A95' }} />}\n />\n </Form.Item>\n <Form.Item\n className=\"authing-g2-input-form\"\n label={t('common.problem.form.question')}\n name=\"questionPicker\"\n initialValue={typeProblem}\n >\n <Select\n className=\"authing-g2-select\"\n onChange={(value: number) => {\n setTypeProblem(value)\n }}\n >\n {typeOperations?.map(({ value, label }) => (\n <Select.Option key={value} value={value}>\n {label}\n </Select.Option>\n ))}\n </Select>\n </Form.Item>\n <div className=\"authing-g2-input-form\">\n {textMap?.map((item: any, index: any) => (\n <div key={index}>{item}</div>\n ))}\n </div>\n\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"description\"\n label={t('common.problem.form.questionDescript')}\n >\n <Input.TextArea\n className=\"authing-g2-input\"\n maxLength={200}\n showCount\n style={{\n marginBottom: 10,\n }}\n />\n </Form.Item>\n\n <div className=\"authing-g2-input-form\">\n <div className=\"label-title\">\n {t('common.problem.form.questionClip')}\n </div>\n <div className=\"g2-questions\">\n <Upload\n action={`${props.host}/api/v2/upload?folder=photos`}\n listType=\"picture-card\"\n accept=\"image/png, image/jpeg, image/jpg\"\n className=\"authing-g2-questions-upload-self\"\n fileList={fileList}\n onPreview={handlePreview}\n onChange={(e) => {\n setFileList(e.fileList)\n const imgUrl: any = e.fileList.map((item: any) => {\n const response = item.response\n return response?.data.url\n })\n setUploadUrl(imgUrl)\n }}\n >\n {fileList.length >= 5 ? null : <PlusOutlined />}\n </Upload>\n </div>\n </div>\n\n <Form.Item className=\"authing-g2-input-form submit-form\">\n <SubmitButton\n className=\"forget-password\"\n text={t('common.problem.form.submit')}\n ref={submitButtonRef}\n />\n </Form.Item>\n </Form>\n\n <Modal\n visible={previewVisible}\n title={null}\n footer={null}\n onCancel={() => setPreviewVisible(false)}\n >\n <img alt=\"example\" style={{ width: '100%' }} src={previewImage} />\n </Modal>\n </div>\n )\n}\n","import React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ImagePro } from '../ImagePro'\nimport { DescribeQuestions } from './core/describeQuestions'\nimport { GuardModuleType } from '../Guard/module'\n\nexport const GuardNeedHelpView = (props: any) => {\n const { t } = useTranslation()\n\n const onSuccess = () => {\n props.__changeModule?.(GuardModuleType.SUBMIT_SUCCESS)\n }\n\n return (\n <div className=\"g2-view-container\">\n <div className=\"g2-view-header\">\n <ImagePro\n src={props.config?.logo}\n size={48}\n borderRadius={4}\n alt=\"\"\n className=\"icon\"\n />\n\n <div className=\"title\">{t('common.problem.title')}</div>\n </div>\n <div className=\"g2-view-tabs\">\n <DescribeQuestions\n appId={props.config.__publicConfig__.id}\n host={props.config.__appHost__}\n onSuccess={onSuccess}\n />\n </div>\n <div className=\"g2-tips-line \">\n <div className=\"back-to-login\">\n <span className=\"gray\">{t('common.noQuestions')}</span>\n <span\n className=\"link-like\"\n onClick={() => props.__changeModule(GuardModuleType.LOGIN)}\n >\n {t('common.goToLogin')}\n </span>\n </div>\n </div>\n </div>\n )\n}\n","import { PlusOutlined } from '@ant-design/icons'\nimport { message, Spin, Upload } from 'antd'\nimport { UploadChangeParam } from 'antd/lib/upload'\nimport React, { FC, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { useGuardContext } from '../../../context/global/context'\n\nexport const UploadImage: FC<{\n value?: string\n onChange?: (value: string) => void\n}> = ({ value, onChange }) => {\n const [uploading, setUploading] = useState(false)\n const { t } = useTranslation()\n const {\n state: {\n config: { apiHost },\n },\n } = useGuardContext()\n\n const onStatusChange = (info: UploadChangeParam) => {\n const { status } = info.file\n\n if (status === 'uploading') {\n setUploading(true)\n } else {\n setUploading(false)\n }\n\n if (status === 'done') {\n const { code, message: errMsg, data } = info.file.response\n if (code !== 200) {\n return message.error(errMsg)\n }\n const { url } = data\n onChange?.(url)\n } else if (status === 'error') {\n message.error(\n t('common.uploadFail', {\n name: info.file.name,\n })\n )\n }\n }\n\n const uploadButton = (\n <div>\n <PlusOutlined />\n <div style={{ marginTop: 8 }}>Upload</div>\n </div>\n )\n\n return (\n <Upload\n name=\"file\"\n accept=\"image/*\"\n listType=\"picture-card\"\n showUploadList={false}\n action={`${apiHost}/api/v2/upload?folder=photos`}\n onChange={onStatusChange}\n >\n <Spin size=\"small\" spinning={uploading}>\n {value ? (\n <img src={value} alt=\"\" style={{ width: '100%' }} />\n ) : (\n uploadButton\n )}\n </Spin>\n </Upload>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Form, Input, message, Select } from 'antd'\nimport { useTranslation } from 'react-i18next'\nimport { useAsyncFn } from 'react-use'\nimport { ExtendsField } from '../../AuthingGuard/api'\nimport { UploadImage } from '../../AuthingGuard/Forms/UploadImage'\nimport { useAuthClient } from '../../Guard/authClient'\nimport { i18n } from '../../_utils/locales'\nimport { useGuardHttp } from '../../_utils/guradHttp'\nimport { GuardCompleteInfoViewProps } from '../interface'\nimport SubmitButton from '../../SubmitButton'\n\nexport interface CompleteInfoProps {\n extendsFields: ExtendsField[]\n onRegisterInfoCompleted?: GuardCompleteInfoViewProps['onRegisterInfoCompleted']\n onRegisterInfoCompletedError?: GuardCompleteInfoViewProps['onRegisterInfoCompletedError']\n}\n\nexport const CompleteInfo: React.FC<CompleteInfoProps> = ({\n extendsFields,\n onRegisterInfoCompleted,\n onRegisterInfoCompletedError,\n}) => {\n const authClient = useAuthClient()\n const submitButtonRef = useRef<any>(null)\n const { get, post } = useGuardHttp()\n const { t } = useTranslation()\n const [form] = Form.useForm()\n\n const [definitions, setDefinitions] = useState<any[]>([])\n\n const [, loadInitData] = useAsyncFn(async () => {\n const user = await authClient.getCurrentUser()\n\n const { data } = await get<any>('/api/v2/udfs/definitions', undefined, {\n headers: {\n authorization: user?.token!,\n },\n })\n\n setDefinitions(data)\n }, [authClient, get])\n\n useEffect(() => {\n loadInitData()\n }, [loadInitData])\n\n const INPUT_MAP: Record<string, React.ReactNode | undefined> = {\n image: <UploadImage />,\n }\n const INTERNAL_INPUT_MAP: Record<string, React.ReactNode | undefined> = {\n gender: (\n <Select\n className=\"authing-g2-select\"\n options={[\n { label: i18n.t('common.man'), value: 'M' },\n { label: i18n.t('common.female'), value: 'F' },\n ]}\n />\n ),\n }\n\n const formFields = extendsFields.map((def) => {\n const key = `${def.type} ${def.type === 'internal' ? def.name : def.id}`\n\n const label = i18n.language === 'zh-CN' ? def.label : def.name\n\n return (\n <Form.Item\n key={key}\n name={key}\n label={label}\n // style={{ marginBottom: 24 }}\n className=\"authing-g2-input-form\"\n rules={[\n {\n required: true,\n message: `${label} ${t('login.noEmpty')}`,\n },\n ]}\n >\n {INTERNAL_INPUT_MAP[def.name] || INPUT_MAP[def.inputType] || (\n <Input\n type={def.inputType}\n size=\"large\"\n className=\"authing-g2-input\"\n autoComplete=\"tel\"\n />\n )}\n </Form.Item>\n )\n })\n\n const [, onFinish] = useAsyncFn(async (values: any) => {\n submitButtonRef.current?.onSpin(true)\n\n const internalFields: any = {}\n const userFields: any[] = []\n Object.entries(values).forEach(([key, value]) => {\n const [type, nameOrId] = key.split(' ')\n if (type === 'internal') {\n internalFields[nameOrId] = value\n } else if (type === 'user') {\n userFields.push({ nameOrId, value })\n }\n })\n\n const udfs = userFields.map(({ nameOrId, value }) => ({\n definition: definitions.find((def) => def.id === nameOrId),\n value,\n }))\n\n try {\n const user = await authClient.updateProfile(internalFields)\n\n await post(\n `/api/v2/udfs/values`,\n {\n udfs,\n },\n {\n headers: {\n authorization: user?.token,\n },\n }\n )\n submitButtonRef.current?.onSpin(false)\n message.success(t('common.saveSuccess'))\n onRegisterInfoCompleted?.(user, udfs, authClient)\n } catch (e) {\n // TODO\n submitButtonRef.current?.onSpin(false)\n onRegisterInfoCompletedError?.(e, udfs, authClient)\n }\n }, [])\n\n return (\n <Form\n layout=\"vertical\"\n form={form}\n onFinish={onFinish}\n onFinishFailed={() => submitButtonRef.current.onError()}\n >\n {formFields}\n\n <Form.Item className=\"authing-g2-input-form\">\n <SubmitButton\n text={t('common.problem.form.submit')}\n ref={submitButtonRef}\n className=\"password g2-completeInfo-submit\"\n />\n </Form.Item>\n </Form>\n )\n}\n","import React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { ImagePro } from '../ImagePro'\nimport { GuardModuleType } from '../Guard/module'\n\nimport { CompleteInfo } from './core/completeInfo'\nimport { GuardCompleteInfoViewProps } from './interface'\n\nimport './styles.less'\n\nexport const GuardCompleteInfoView: React.FC<GuardCompleteInfoViewProps> = ({\n config,\n onRegisterInfoCompleted,\n onRegisterInfoCompletedError,\n __changeModule,\n}) => {\n const { t } = useTranslation()\n return (\n <div className=\"g2-view-container\">\n <div className=\"g2-view-header\">\n <ImagePro\n src={config?.logo}\n size={48}\n borderRadius={4}\n alt=\"\"\n className=\"icon\"\n />\n <div className=\"title\">{t('common.perfectUserInfo')}</div>\n <div className=\"title-explain\">\n {t('common.welcomeDoc', { name: config.title })}\n </div>\n </div>\n <div className=\"g2-view-tabs g2-completeInfo-content\">\n <CompleteInfo\n extendsFields={config?.__publicConfig__?.extendsFields!}\n onRegisterInfoCompleted={(user, udfs, authClient) => {\n onRegisterInfoCompleted?.(user, udfs, authClient)\n __changeModule?.(GuardModuleType.LOGIN, {})\n }}\n onRegisterInfoCompletedError={onRegisterInfoCompletedError}\n />\n </div>\n </div>\n )\n}\n","import { LockOutlined } from '@ant-design/icons'\nimport { Form, Input } from 'antd'\nimport React, { useRef } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport SubmitButton from '../../SubmitButton'\nimport { useGuardHttp } from '../../_utils/guradHttp'\n\nexport interface UseCodeProps {\n mfaToken: string\n}\n\nexport const UseCode: React.FC<UseCodeProps> = ({ mfaToken }) => {\n const { t } = useTranslation()\n\n const [form] = Form.useForm()\n\n const { post } = useGuardHttp()\n\n const onFinish = async () => {\n submitButtonRef.current?.onSpin(true)\n\n await post(\n '/api/v2/mfa/totp/recovery',\n {\n recoveryCode: form.getFieldValue('recoveryCode'),\n },\n {\n headers: {\n authorization: mfaToken,\n },\n }\n )\n }\n\n let submitButtonRef = useRef<any>(null)\n\n return (\n <>\n <p className=\"authing-g2-mfa-title\">{t('common.useRecoverCode')}</p>\n <p className=\"authing-g2-mfa-tips\">{t('login.mfaAfterReset')}</p>\n <Form\n form={form}\n onFinish={onFinish}\n onFinishFailed={() => submitButtonRef.current.onError()}\n >\n <Form.Item\n className=\"authing-g2-input-form\"\n name=\"recoveryCode\"\n rules={[\n {\n required: true,\n message: t('login.inputRecoverCode'),\n },\n ]}\n >\n <Input\n className=\"authing-g2-input\"\n autoComplete=\"email\"\n size=\"large\"\n placeholder={t('login.inputRecoverCode')}\n prefix={<LockOutlined style={{ color: '#878A95' }} />}\n />\n </Form.Item>\n\n <Form.Item className=\"authing-g2-input-form submit-form\">\n <SubmitButton text={t('common.sure')} ref={submitButtonRef} />\n </Form.Item>\n </Form>\n </>\n )\n}\n","import React from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { IconFont } from '../IconFont'\nimport { UseCode } from './core/useCode'\nimport { GuardRecoveryCodeViewProps } from './interface'\nimport './style.less'\nconst window: Window = require('global/window')\n\nexport const GuardRecoveryCodeView: React.FC<GuardRecoveryCodeViewProps> = ({\n initData,\n}) => {\n const onBack = () => window.history.back()\n const { t } = useTranslation()\n return (\n <div className=\"g2-view-container g2-mfa-recovery-code\">\n <div className=\"g2-view-back\">\n <span onClick={onBack}>\n <IconFont type=\"authing-back\" />\n <span>{t('common.backToVerify')}</span>\n </span>\n </div>\n <div className=\"g2-mfa-content\">\n <UseCode mfaToken={initData.mfaToken} />\n </div>\n </div>\n )\n}\n","/** eslint-disable */\n/**\n * !!!!!!!!!!!! 注意注意!!!!!!!!!!!!!\n *\n * 只要替换 svgStr 中的字符串即可,为了兼容 SSR!!!!!!\n *\n */\nimport { svgStr } from './svg'\nvar init = function (a) {\n var c,\n t,\n l,\n e,\n i,\n o,\n h = svgStr,\n m = (m = document.getElementsByTagName('script'))[\n m.length - 1\n ].getAttribute('data-injectcss')\n if (m && !a.__iconfont__svg__cssinject__) {\n a.__iconfont__svg__cssinject__ = !0\n try {\n document.write(\n '<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>'\n )\n } catch (a) {\n console && console.log(a)\n }\n }\n function n() {\n i || ((i = !0), l())\n }\n ;(c = function () {\n var a, c, t\n ;((t = document.createElement('div')).innerHTML = h),\n (h = null),\n (c = t.getElementsByTagName('svg')[0]) &&\n (c.setAttribute('aria-hidden', 'true'),\n (c.style.position = 'absolute'),\n (c.style.width = 0),\n (c.style.height = 0),\n (c.style.overflow = 'hidden'),\n (a = c),\n (t = document.body).firstChild\n ? (c = t.firstChild).parentNode.insertBefore(a, c)\n : t.appendChild(a))\n }),\n document.addEventListener\n ? ~['complete', 'loaded', 'interactive'].indexOf(document.readyState)\n ? setTimeout(c, 0)\n : ((t = function () {\n document.removeEventListener('DOMContentLoaded', t, !1), c()\n }),\n document.addEventListener('DOMContentLoaded', t, !1))\n : document.attachEvent &&\n ((l = c),\n (e = a.document),\n (i = !1),\n (o = function () {\n try {\n e.documentElement.doScroll('left')\n } catch (a) {\n return void setTimeout(o, 50)\n }\n n()\n })(),\n (e.onreadystatechange = function () {\n 'complete' == e.readyState && ((e.onreadystatechange = null), n())\n }))\n}\n\nif (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n init(window)\n}\n","export const svgStr =\n '<svg><symbol id=\"authing-gitlab\" viewBox=\"0 0 1024 1024\"><path d=\"M958.326 570.912l-50.136-154.3L808.827 110.8c-5.111-15.733-27.372-15.733-32.485 0l-99.365 305.812H347.024L247.656 110.8c-5.11-15.733-27.37-15.733-32.484 0l-99.363 305.812-50.134 154.3c-4.575 14.073 0.437 29.49 12.407 38.19L512 924.358 945.92 609.1a34.16 34.16 0 0 0 12.407-38.19\" ></path></symbol><symbol id=\"authing-yuyan\" viewBox=\"0 0 1024 1024\"><path d=\"M960 511.616A447.808 447.808 0 0 0 512 64C264.576 64 64 264.384 64 511.616a447.808 447.808 0 0 0 392.32 444.16 224.384 224.384 0 0 0 60.352 3.456A447.744 447.744 0 0 0 960 511.616z m-64 6.4a437.952 437.952 0 0 0-8.768-65.472c0.384-7.616 0.512-14.784 0.256-21.504 5.696 26.496 8.512 53.504 8.512 80.64v6.272z m-768-6.4c0-26.56 2.752-53.12 8.192-79.104 16.576 17.728 55.68 17.28 65.216-9.216 17.024 10.176 39.936 12.032 39.936 32.32 0 67.072 2.432 138.944 63.36 140.032 1.664 0 33.92 12.224 49.28 52.096 5.312 13.76 26.304 0 49.344 0 11.52 0 0 19.328 0 61.184 0 41.92 89.92 105.984 89.92 105.984-0.384 27.584 0.768 49.92 3.008 67.712a150.912 150.912 0 0 0-50.816 6.848A383.68 383.68 0 0 1 128 511.616z m478.592 371.968c-2.048-9.728-10.752-15.04-26.624-10.88 12.672-54.016 18.816-84.288 45.312-107.2 38.272-33.216 4.48-70.144-24.576-65.792-23.04 3.456-8.448-28.416-29.056-30.208-20.544-1.728-47.232-42.432-76.736-56.512-15.616-7.424-30.976-27.328-55.104-28.16-21.376-0.832-52.672 18.048-52.672 3.456 0-46.912-4.8-80.448-5.76-93.76-0.768-10.752-7.04-3.648 21.888-2.944 15.744 0.384 8.064-31.616 23.616-32.832 15.296-1.28 51.712 14.272 60.992 8.128 8.64-5.76 63.36 143.744 63.36 24.704 0-14.08-7.296-38.72 0-52.096 28.992-52.864 56.064-95.936 53.632-102.208-1.344-3.584-29.568-6.464-52.16 1.088-7.68 2.56 2.432 14.464-8.512 17.024-41.024 9.472-77.248-11.072-64.64-30.336 13.056-19.84 60.16-8.64 64.256-48.256 2.368-22.72 4.352-49.088 5.632-68.608 55.232 8.64 49.152-71.616-32.896-80.192a384.128 384.128 0 0 1 358.272 257.92 15.552 15.552 0 0 0-9.152-4.16c-24.832-62.016-84.992-17.152-64.64 37.504-109.44 84.16-81.408 142.784-45.44 176.384 18.944 17.728 36.992 44.288 48.704 63.36-12.8 37.248 47.104 22.336 76.672-40.96a384.576 384.576 0 0 1-274.432 265.6z\" ></path></symbol><symbol id=\"authing-anzhuo\" viewBox=\"0 0 1024 1024\"><path d=\"M141.1 331.2c-35 0-63.3 28.3-63.3 63.2v264.7c0 34.9 28.4 63.2 63.3 63.2 35 0 63.3-28.3 63.3-63.2V394.4c0-34.9-28.3-63.2-63.3-63.2zM228.9 753.3c0 37.3 30.3 67.5 67.6 67.5h46.1v140c0 34.9 28.4 63.2 63.3 63.2 35 0 63.3-28.3 63.3-63.2v-140h85.5v140c0 34.9 28.4 63.2 63.3 63.2 35 0 63.3-28.3 63.3-63.2v-140h46.1c37.3 0 67.6-30.2 67.6-67.5V343.1H228.9v410.2zM651.8 93.4L696 13c2.4-4.2 0.8-9.6-3.5-11.9-4.2-2.3-9.6-0.8-11.9 3.5l-44.7 81.2C598.4 69.2 556.4 59.9 512 59.9c-44.4 0-86.4 9.3-123.9 25.8L343.4 4.6c-2.3-4.3-7.7-5.8-11.9-3.5-4.3 2.3-5.9 7.7-3.5 11.9l44.2 80.4c-86.8 44.8-145.5 130-145.5 227.7h570.5c0.1-97.8-58.6-182.9-145.4-227.7zM382.2 218c-13.2 0-23.9-10.7-23.9-23.9s10.7-23.9 23.9-23.9 23.9 10.7 23.9 23.9c-0.1 13.2-10.8 23.9-23.9 23.9z m259.7 0c-13.2 0-23.9-10.7-23.9-23.9s10.7-23.9 23.9-23.9 23.9 10.7 23.9 23.9c-0.1 13.2-10.8 23.9-23.9 23.9zM882.9 331.2c-35 0-63.3 28.3-63.3 63.2v264.7c0 34.9 28.4 63.2 63.3 63.2 35 0 63.3-28.3 63.3-63.2V394.4c0-34.9-28.3-63.2-63.3-63.2z\" ></path></symbol><symbol id=\"authing-lark-public\" viewBox=\"0 0 1024 1024\"><path d=\"M933.875 98.5625L726.53414917 322.64486695a6.61651612 6.61651612 0 0 0-1.64300537 5.81726073 40.54449463 40.54449463 0 0 1-68.92053223 36.37023927L490.72827148 530.02856445l16.29821778 218.30960083L692.5625 933.875z m0 0\" ></path><path d=\"M931.6098938 104.2026062l-205.12023926 221.68377685a6.61651612 6.61651612 0 0 0-1.64300537 5.86175538 39.96688843 39.96688843 0 0 1-68.21026612 35.92611694L494.23675537 530.07388305a3.28601074 3.28601074 0 0 0-0.93273925 2.53125l16.03125 214.40148927 413.61547851-623.97537232 8.88162232-18.74047852z m0 0\" ></path><path d=\"M925.48199463 90.16949463L701.39880372 297.46502685a6.61651612 6.61651612 0 0 1-5.86175538 1.68832398 40.54449463 40.54449463 0 0 0-36.32574462 68.92053222L493.97143555 533.31622315l-218.22143555-16.43005372L90.125 331.43667602z m0 0\" ></path><path d=\"M919.8427124 92.65625l-221.77359008 205.12023926a6.61651612 6.61651612 0 0 1-5.77276612 1.64300537 39.96688843 39.96688843 0 0 0-35.92611695 68.21026612L493.92611695 530.02938843a3.28601074 3.28601074 0 0 1-2.57574463 0.93273925l-214.40148927-16.03125L900.96875 101.31539917l18.74047852-8.88079834z m0 0\" ></path></symbol><symbol id=\"authing-lark-internal\" viewBox=\"0 0 1024 1024\"><path d=\"M933.875 98.5625L726.53414917 322.64486695a6.61651612 6.61651612 0 0 0-1.64300537 5.81726073 40.54449463 40.54449463 0 0 1-68.92053223 36.37023927L490.72827148 530.02856445l16.29821778 218.30960083L692.5625 933.875z m0 0\" ></path><path d=\"M931.6098938 104.2026062l-205.12023926 221.68377685a6.61651612 6.61651612 0 0 0-1.64300537 5.86175538 39.96688843 39.96688843 0 0 1-68.21026612 35.92611694L494.23675537 530.07388305a3.28601074 3.28601074 0 0 0-0.93273925 2.53125l16.03125 214.40148927 413.61547851-623.97537232 8.88162232-18.74047852z m0 0\" ></path><path d=\"M925.48199463 90.16949463L701.39880372 297.46502685a6.61651612 6.61651612 0 0 1-5.86175538 1.68832398 40.54449463 40.54449463 0 0 0-36.32574462 68.92053222L493.97143555 533.31622315l-218.22143555-16.43005372L90.125 331.43667602z m0 0\" ></path><path d=\"M919.8427124 92.65625l-221.77359008 205.12023926a6.61651612 6.61651612 0 0 1-5.77276612 1.64300537 39.96688843 39.96688843 0 0 0-35.92611695 68.21026612L493.92611695 530.02938843a3.28601074 3.28601074 0 0 1-2.57574463 0.93273925l-214.40148927-16.03125L900.96875 101.31539917l18.74047852-8.88079834z m0 0\" ></path></symbol><symbol id=\"authing-guanbi7-01copy_1\" viewBox=\"0 0 1024 1024\"><path d=\"M0.00007 512.306485a511.999485 511.999485 0 0 1 1023.99797-0.512v0.512a510.974486 510.974486 0 0 1-511.999485 511.691485C228.86384 1023.99797 0.00007 794.725201 0.00007 512.306485z m546.200451 0l178.89282-178.78982a23.244977 23.244977 0 0 0 0-33.075967l-1.126999-1.023999a23.244977 23.244977 0 0 0-33.176967 0L511.999555 478.514519l-178.78982-179.19982a23.244977 23.244977 0 0 0-33.177967 0l-1.023999 1.023999a23.244977 23.244977 0 0 0 0 33.074967l178.78982 179.199819-178.89282 178.789821a23.244977 23.244977 0 0 0 0 33.177966l1.126999 1.023999a23.244977 23.244977 0 0 0 33.176967 0L511.999555 547.12245 690.789375 725.80927a23.244977 23.244977 0 0 0 33.177967 0l1.023999-1.023999a23.244977 23.244977 0 0 0 0-33.176967l-178.78982-179.199819z\" ></path></symbol><symbol id=\"authing-guanbi\" viewBox=\"0 0 1024 1024\"><path d=\"M583.168 523.776L958.464 148.48c18.944-18.944 18.944-50.176 0-69.12l-2.048-2.048c-18.944-18.944-50.176-18.944-69.12 0L512 453.12 136.704 77.312c-18.944-18.944-50.176-18.944-69.12 0l-2.048 2.048c-19.456 18.944-19.456 50.176 0 69.12l375.296 375.296L65.536 899.072c-18.944 18.944-18.944 50.176 0 69.12l2.048 2.048c18.944 18.944 50.176 18.944 69.12 0L512 594.944 887.296 970.24c18.944 18.944 50.176 18.944 69.12 0l2.048-2.048c18.944-18.944 18.944-50.176 0-69.12L583.168 523.776z\" ></path></symbol><symbol id=\"authing-apple-web\" viewBox=\"0 0 1024 1024\"><path d=\"M797.3 656c24.6 34.8 52.8 57.3 84.6 67.5-13.8 42.6-35.7 87-65.7 133.2-46.2 69.6-91.8 104.4-136.8 104.4-16.8 0-41.7-5.7-74.7-17.1-30.6-11.4-57.3-17.1-80.1-17.1-22.8 0-48 6-75.6 18-28.8 11.4-52.5 17.1-71.1 17.1-54 0-107.1-45.9-159.3-137.7-52.2-90.6-78.3-179.7-78.3-267.3 0-81 19.8-147.3 59.4-198.9 40.8-51.6 91.2-77.4 151.2-77.4 13.2 0 27.9 1.65 44.1 4.95 16.2 3.3 33 9.45 50.4 18.45 18.6 10.2 33.9 17.25 45.9 21.15 12 3.9 21.3 5.85 27.9 5.85 7.8 0 19.8-1.8 36-5.4a166.088 166.088 0 0 0 48.6-19.8 366.113 366.113 0 0 1 45-21.6c12.6-4.8 25.5-7.2 38.7-7.2 42 0 79.8 11.4 113.4 34.2 18 12 36.3 29.7 54.9 53.1-27.6 24-47.7 45-60.3 63-23.4 33.6-35.1 70.2-35.1 109.8 0 43.8 12.3 83.4 36.9 118.8zM616.4 235.7c-21 19.8-40.2 32.7-57.6 38.7-6 1.8-13.65 3.45-22.95 4.95-9.3 1.5-19.95 2.85-31.95 4.05 0.6-52.8 14.4-98.4 41.4-136.8 27-38.4 71.4-64.8 133.2-79.2 1.2 6 2.1 10.2 2.7 12.6v9.9c0 21.6-5.1 45.9-15.3 72.9a221.625 221.625 0 0 1-49.5 72.9z\" ></path></symbol><symbol id=\"authing-google\" viewBox=\"0 0 1024 1024\"><path d=\"M1000 523.6c0 283-193.8 484.4-480 484.4-274.4 0-496-221.6-496-496S245.6 16 520 16c133.6 0 246 49 332.6 129.8l-135 129.8c-176.6-170.4-505-42.4-505 236.4 0 173 138.2 313.2 307.4 313.2 196.4 0 270-140.8 281.6-213.8H520V440.8h472.2c4.6 25.4 7.8 49.8 7.8 82.8z\" ></path></symbol><symbol id=\"authing-dingtalk\" viewBox=\"0 0 1024 1024\"><path d=\"M905.857912 382.800144a192.415957 192.415957 0 0 1-12.101998 31.649993h0.186l-0.744 1.257c-35.140992 76.657983-126.881972 226.998949-126.881971 226.998949s-0.093-0.373-0.466-0.93l-26.856994 47.567989h129.301971L621.375975 1024l56.039988-227.649949H575.715986l35.326992-150.525966a1436.834677 1436.834677 0 0 0-102.397977 29.789993s-54.130988 32.393993-155.923965-62.137986c0 0-68.699985-61.672986-28.857994-77.079982 16.941996-6.560999 82.197982-14.892997 133.53597-21.967996 69.444984-9.494998 112.172975-14.614997 112.172975-14.614996s-214.106952 3.257999-264.83994-4.886999c-50.732989-8.099998-115.104974-94.484979-128.834972-170.353962 0 0-21.223995-41.702991 45.65999-21.968995 66.838985 19.734996 343.499923 76.799983 343.499923 76.799983S205.267069 266.95017 181.250074 239.487176c-23.922995-27.459994-70.374984-149.732966-64.324985-224.901949 0 0 2.606999-18.757996 21.457995-13.729997 0 0 266.00294 123.946972 447.852899 191.762957 181.896959 67.815985 340.009924 102.398977 319.622929 190.181957z\" ></path></symbol><symbol id=\"authing-apple\" viewBox=\"0 0 1024 1024\"><path d=\"M797.3 656c24.6 34.8 52.8 57.3 84.6 67.5-13.8 42.6-35.7 87-65.7 133.2-46.2 69.6-91.8 104.4-136.8 104.4-16.8 0-41.7-5.7-74.7-17.1-30.6-11.4-57.3-17.1-80.1-17.1-22.8 0-48 6-75.6 18-28.8 11.4-52.5 17.1-71.1 17.1-54 0-107.1-45.9-159.3-137.7-52.2-90.6-78.3-179.7-78.3-267.3 0-81 19.8-147.3 59.4-198.9 40.8-51.6 91.2-77.4 151.2-77.4 13.2 0 27.9 1.65 44.1 4.95 16.2 3.3 33 9.45 50.4 18.45 18.6 10.2 33.9 17.25 45.9 21.15 12 3.9 21.3 5.85 27.9 5.85 7.8 0 19.8-1.8 36-5.4a166.088 166.088 0 0 0 48.6-19.8 366.113 366.113 0 0 1 45-21.6c12.6-4.8 25.5-7.2 38.7-7.2 42 0 79.8 11.4 113.4 34.2 18 12 36.3 29.7 54.9 53.1-27.6 24-47.7 45-60.3 63-23.4 33.6-35.1 70.2-35.1 109.8 0 43.8 12.3 83.4 36.9 118.8zM616.4 235.7c-21 19.8-40.2 32.7-57.6 38.7-6 1.8-13.65 3.45-22.95 4.95-9.3 1.5-19.95 2.85-31.95 4.05 0.6-52.8 14.4-98.4 41.4-136.8 27-38.4 71.4-64.8 133.2-79.2 1.2 6 2.1 10.2 2.7 12.6v9.9c0 21.6-5.1 45.9-15.3 72.9a221.625 221.625 0 0 1-49.5 72.9z\" ></path></symbol><symbol id=\"authing-alipay-web\" viewBox=\"0 0 1024 1024\"><path d=\"M427.154 210.262l-1.819 59.431H185.792v45.481h242.573v78.84H228.24v43.057l203.153-1.823 203.76-1.818-3.641 14.553c-9.094 35.177-47.907 129.173-55.183 132.196-4.244 1.216-33.961-5.458-67.316-15.16-101.276-30.924-151.61-40.023-220.136-40.023-69.74 0.603-115.217 13.342-158.886 44.27-84.897 60.647-91.57 179.506-12.735 245.602 83.687 70.348 220.739 77.017 345.06 16.375 44.267-21.225 123.71-78.84 150.39-108.553l10.922-12.736 34.57 16.98c34.568 17.586 248.03 116.437 284.413 131.598l19.403 8.49V711.17l-52.762-13.95c-47.907-12.74-170.406-50.94-209.826-66.105l-15.16-6.066 20.012-41.238c21.231-42.444 63.68-162.522 63.68-180.108 0-8.491-12.128-9.702-106.128-9.702H555.71v-78.827h254.704v-40.022c0-1.817-57.614-3.032-127.353-2.425l-127.347 0.602V151.437H428.967l-1.813 58.825z m-23.657 395.392c31.535 10.922 73.382 27.896 92.786 38.206l35.167 18.805-19.404 24.255c-10.913 13.342-35.775 36.387-56.399 51.548-69.133 51.542-133.41 71.553-215.887 66.703-86.112-4.852-132.201-40.023-137.66-105.517-3.64-40.63 5.459-63.675 33.359-84.901 35.172-26.685 63.67-32.742 141.296-30.924 59.431 1.814 78.232 5.449 126.742 21.825z\" ></path></symbol><symbol id=\"authing-wechat-miniprogram-app-launch\" viewBox=\"0 0 1126 1024\"><path d=\"M961.876 262.606C900.851 134.702 747.238 80.676 619.77 141.425c-69.45 33.34-113.232 90.332-130.04 168.839-15.583 71.308-6.328 150.685 2.926 211.869 12.22 78.071 12.656 135.459 1.7 176.393-9.69 36.306-29.464 59.957-61.46 75.54a135.814 135.814 0 0 1-104.372 5.102 137.634 137.634 0 0 1-77.835-69.647 136.764 136.764 0 0 1 64.388-181.93c14.317-7.12 25.668-19.38 30.73-34.607 5.023-15.187 4.628-31.244-2.136-45.996a60.511 60.511 0 0 0-34.487-30.81 61.54 61.54 0 0 0-45.878 2.136 256.284 256.284 0 0 0-131.86 145.98 257.233 257.233 0 0 0 10.284 196.72 256.403 256.403 0 0 0 231.802 146.494 263.007 263.007 0 0 0 110.265-24.916c69.41-33.341 113.192-89.462 130.04-167.97 15.149-70.913 6.328-150.29-2.966-210.603-12.22-78.942-12.656-136.764-1.701-177.698 9.69-36.307 29.465-60.354 62.292-75.54a136.962 136.962 0 0 1 182.205 64.585 136.764 136.764 0 0 1-64.387 181.93 60.511 60.511 0 0 0-28.16 80.167c6.724 14.753 19.34 25.708 34.053 30.81 15.148 5.063 31.166 4.628 45.877-2.135 127.51-62.45 181.378-216.101 120.786-343.531z\" ></path></symbol><symbol id=\"authing-qq\" viewBox=\"0 0 1024 1024\"><path d=\"M821.295 699.385a275.463 275.463 0 0 1-57.3 90.76c54.54 16.634 41.202 45.496 41.202 45.496 24.223 13.299 22.69 99.729-111.381 98.195-89.38-0.996-127.248-26.062-142.695-42.735-11.498 1.15-23.035 1.802-34.61 1.84-14.296 0-28.286-1.073-42.084-2.645-14.91 16.634-52.586 42.544-143.308 43.54-133.879 1.534-135.412-84.895-111.15-98.195 0 0-14.642-31.046 47.142-47.335a272.511 272.511 0 0 1-58.794-98.311c-56.035 99.537-83.057 33.575-79.033-42.66 3.604-67.687 63.241-144.61 78.726-163.43a60.98 60.98 0 0 1-4.6-22.804c0-16.482 6.593-31.506 17.363-42.775a44.844 44.844 0 0 1 20.045-46.223c-0.076-2.414-0.306-4.753-0.306-7.206 0-151.394 123.569-274.235 275.96-274.235 152.469 0 275.961 122.802 275.961 274.235 0 4.6-0.268 9.122-0.498 13.645 10.425 10.617 14.947 25.68 11.998 40.283 10.616 11.192 17.36 25.871 17.36 42.276 0 8.125-1.723 15.829-4.598 22.997 15.56 19.163 74.816 96.01 78.38 163.698 3.91 74.164-21.31 138.67-73.78 51.589z\" ></path></symbol><symbol id=\"authing-wechat-mobile\" viewBox=\"0 0 1239 1024\"><path d=\"M745.256 511.245c-21.665 0-43.385 20.373-43.385 45.595 0 20.373 21.72 40.96 43.385 40.96 32.553 0 55.835-20.587 55.835-40.96 0-25.222-23.282-45.595-55.835-45.595M602.705 298.9c34.115 0 55.78-22.097 55.78-55.08 0-34.655-21.665-55.027-55.78-55.027-32.499 0-63.488 20.372-63.488 54.973 0 33.091 30.99 55.08 63.488 55.08M440.05 756.574c-57.344 0-99.167-9.431-153.439-25.169l-156.456 80.196 44.948-135.222C65.051 597.747 0 498.58 0 377.479 0 163.57 198.333 0 440.05 0c213.8 0 404.427 128.97 441.56 311.458a211.106 211.106 0 0 0-41.822-4.743c-210.729 0-373.383 160.498-373.383 353.927 0 33.037 4.635 62.895 12.396 94.37-12.396 1.616-26.409 1.616-38.804 1.616m646.198 154.14L1117.13 1024l-117.76-67.638c-44.894 9.378-88.28 23.606-133.228 23.606-207.656 0-371.873-144.761-371.873-324.07 0-179.253 164.217-323.96 371.873-323.96 196.77 0 373.437 144.707 373.437 323.907 0 100.783-66.614 190.356-153.384 254.922M295.882 188.793c-32.498 0-66.614 20.372-66.614 54.973 0 33.091 34.116 55.08 66.614 55.08 30.99 0 55.781-21.989 55.781-55.026 0-34.655-24.791-55.027-55.78-55.027m692.6 322.452c-23.228 0-43.385 20.373-43.385 45.595 0 20.373 20.157 40.96 43.385 40.96 30.99 0 54.272-20.587 54.272-40.96 0-25.222-23.282-45.595-54.272-45.595\" ></path></symbol><symbol id=\"authing-baidu\" viewBox=\"0 0 1024 1024\"><path d=\"M204.8 537.876c104.422-22.429 90.196-147.185 86.967-174.501-5.149-42.066-54.545-115.55-121.658-109.746-84.48 7.593-96.873 129.6-96.873 129.6C61.891 439.695 100.64 560.262 204.8 537.876zM315.636 754.75c-3.141 8.858-9.861 31.244-4.058 50.75 11.607 43.766 49.658 45.774 49.658 45.774h54.677V717.658H357.44c-26.27 7.855-39.01 28.407-41.847 37.091z m82.779-426.022c57.774 0 104.29-66.37 104.29-148.407C502.705 98.327 456.19 32 398.415 32c-57.47 0-104.16 66.37-104.16 148.32 0 82.036 46.69 148.364 104.29 148.364z m248.334 9.731c77.062 10.037 126.676-72.262 136.407-134.618 10.037-62.138-39.665-134.53-94.21-146.924-54.633-12.523-122.88 75.055-129.077 132.131-7.418 69.818 9.95 139.462 86.88 149.411zM835.564 704.83s-119.259-92.247-188.815-191.913c-94.254-147.01-228.349-87.185-273.164-12.48-44.64 74.75-114.196 122.095-124.014 134.531-10.036 12.393-144 84.655-114.327 216.742 29.76 132 134.269 129.6 134.269 129.6s76.974 7.55 166.342-12.393c89.323-19.898 166.21 4.975 166.21 4.975s208.67 69.818 265.746-64.713C924.8 774.56 835.564 704.83 835.564 704.83zM478.487 905.076H342.865c-58.56-11.738-81.905-51.665-84.916-58.472-2.924-6.982-19.505-39.142-10.69-93.819 25.308-81.905 97.483-87.796 97.483-87.796h72.218v-88.844l61.484 0.96 0.087 327.928z m252.742-0.96H575.011c-60.524-15.534-63.316-58.56-63.316-58.56V672.844l63.36-1.004v155.127c3.84 16.495 24.436 19.637 24.436 19.637h64.32v-173.76h67.418v231.272z m220.975-461.018c0-29.847-24.742-119.65-116.64-119.65-92.073 0-104.335 84.741-104.335 144.654 0 57.163 4.887 137.062 119.127 134.443 114.415-2.443 101.848-129.469 101.848-159.447z\" ></path></symbol><symbol id=\"authing-wechat-pc\" viewBox=\"0 0 1239 1024\"><path d=\"M727.677 511.336c-19.042 0-38.132 17.906-38.132 40.074 0 17.906 19.09 36 38.132 36 28.61 0 49.074-18.094 49.074-36 0-22.168-20.463-40.074-49.074-40.074m-125.29-186.63c29.985 0 49.026-19.422 49.026-48.411 0-30.459-19.041-48.364-49.025-48.364-28.564 0-55.8 17.905-55.8 48.316 0 29.084 27.237 48.41 55.8 48.41m-142.959 402.3c-50.4 0-87.158-8.288-134.858-22.12L187.06 775.32l39.505-118.847c-96.726-69.11-153.9-156.269-153.9-262.705C72.667 205.763 246.984 62 459.43 62c187.91 0 355.454 113.353 388.09 273.742a185.542 185.542 0 0 0-36.757-4.168c-185.211 0-328.17 141.062-328.17 311.068 0 29.037 4.075 55.28 10.896 82.943-10.895 1.42-23.211 1.42-34.105 1.42M1027.33 862.48l27.19 99.52-103.5-59.447c-39.458 8.242-77.59 20.747-117.096 20.747-182.51 0-326.841-127.231-326.841-284.827 0-157.547 144.331-284.73 326.841-284.73 172.943 0 328.216 127.183 328.216 284.683 0 88.58-58.547 167.305-134.81 224.053M332.72 227.93c-28.563 0-58.548 17.905-58.548 48.316 0 29.084 29.985 48.41 58.547 48.41 27.238 0 49.026-19.326 49.026-48.362 0-30.459-21.788-48.364-49.025-48.364m608.73 283.405c-20.415 0-38.13 17.906-38.13 40.074 0 17.906 17.715 36 38.13 36 27.238 0 47.7-18.094 47.7-36 0-22.168-20.462-40.074-47.7-40.074\" ></path></symbol><symbol id=\"authing-wechat-miniprogram-qrconnec\" viewBox=\"0 0 1126 1024\"><path d=\"M961.876 262.606C900.851 134.702 747.238 80.676 619.77 141.425c-69.45 33.34-113.232 90.332-130.04 168.839-15.583 71.308-6.328 150.685 2.926 211.869 12.22 78.071 12.656 135.459 1.7 176.393-9.69 36.306-29.464 59.957-61.46 75.54a135.814 135.814 0 0 1-104.372 5.102 137.634 137.634 0 0 1-77.835-69.647 136.764 136.764 0 0 1 64.388-181.93c14.317-7.12 25.668-19.38 30.73-34.607 5.023-15.187 4.628-31.244-2.136-45.996a60.511 60.511 0 0 0-34.487-30.81 61.54 61.54 0 0 0-45.878 2.136 256.284 256.284 0 0 0-131.86 145.98 257.233 257.233 0 0 0 10.284 196.72 256.403 256.403 0 0 0 231.802 146.494 263.007 263.007 0 0 0 110.265-24.916c69.41-33.341 113.192-89.462 130.04-167.97 15.149-70.913 6.328-150.29-2.966-210.603-12.22-78.942-12.656-136.764-1.701-177.698 9.69-36.307 29.465-60.354 62.292-75.54a136.962 136.962 0 0 1 182.205 64.585 136.764 136.764 0 0 1-64.387 181.93 60.511 60.511 0 0 0-28.16 80.167c6.724 14.753 19.34 25.708 34.053 30.81 15.148 5.063 31.166 4.628 45.877-2.135 127.51-62.45 181.378-216.101 120.786-343.531z\" ></path></symbol><symbol id=\"authing-wechat-webpage-authorization\" viewBox=\"0 0 1188 1024\"><path d=\"M512 1.896C229.452 1.896 0 229.452 0 512s229.452 510.104 512 510.104S1022.104 794.548 1022.104 512 794.548 1.896 512 1.896z m-91.022 629.57c-26.548 0-49.304-5.688-75.852-11.377l-75.852 37.926 22.756-66.37c-54.993-37.926-87.23-87.23-87.23-147.912 0-104.296 98.607-185.837 218.074-185.837 108.089 0 201.007 64.474 219.97 153.6-7.585 0-13.274-1.896-20.859-1.896-104.296 0-185.837 77.748-185.837 172.563 0 15.17 1.896 30.34 7.585 45.511-7.585 3.793-15.17 3.793-22.755 3.793z m322.37 77.749l17.067 54.992-58.785-34.133c-22.756 5.689-43.615 11.378-66.37 11.378-104.297 0-185.838-70.163-185.838-157.393S530.963 424.77 635.26 424.77c98.608 0 185.837 70.163 185.837 159.29 0 47.407-32.237 91.021-77.748 125.155z\" fill=\"#46BB36\" ></path><path d=\"M318.578 379.26c0 17.066 13.274 30.34 30.34 30.34s30.341-13.274 30.341-30.34-13.274-30.341-30.34-30.341-30.341 13.274-30.341 30.34z m235.14 159.288c0 13.274 11.378 24.652 24.652 24.652 13.274 0 24.652-11.378 24.652-24.652 0-13.274-11.378-24.652-24.652-24.652-13.274-1.896-24.651 9.482-24.651 24.652z m-81.54-159.289c0 17.067 13.274 30.341 30.34 30.341 17.067 0 30.341-13.274 30.341-30.34 0-17.067-13.274-30.341-30.34-30.341-17.067 0-30.341 13.274-30.341 30.34zM675.08 538.55c0 13.273 11.378 24.651 24.652 24.651 13.274 0 24.652-11.378 24.652-24.652 0-13.274-11.378-24.652-24.652-24.652-13.274-1.896-24.652 9.482-24.652 24.652z\" fill=\"#46BB36\" ></path></symbol><symbol id=\"authing-wechat-miniprogram-default\" viewBox=\"0 0 1126 1024\"><path d=\"M961.876 262.606C900.851 134.702 747.238 80.676 619.77 141.425c-69.45 33.34-113.232 90.332-130.04 168.839-15.583 71.308-6.328 150.685 2.926 211.869 12.22 78.071 12.656 135.459 1.7 176.393-9.69 36.306-29.464 59.957-61.46 75.54a135.814 135.814 0 0 1-104.372 5.102 137.634 137.634 0 0 1-77.835-69.647 136.764 136.764 0 0 1 64.388-181.93c14.317-7.12 25.668-19.38 30.73-34.607 5.023-15.187 4.628-31.244-2.136-45.996a60.511 60.511 0 0 0-34.487-30.81 61.54 61.54 0 0 0-45.878 2.136 256.284 256.284 0 0 0-131.86 145.98 257.233 257.233 0 0 0 10.284 196.72 256.403 256.403 0 0 0 231.802 146.494 263.007 263.007 0 0 0 110.265-24.916c69.41-33.341 113.192-89.462 130.04-167.97 15.149-70.913 6.328-150.29-2.966-210.603-12.22-78.942-12.656-136.764-1.701-177.698 9.69-36.307 29.465-60.354 62.292-75.54a136.962 136.962 0 0 1 182.205 64.585 136.764 136.764 0 0 1-64.387 181.93 60.511 60.511 0 0 0-28.16 80.167c6.724 14.753 19.34 25.708 34.053 30.81 15.148 5.063 31.166 4.628 45.877-2.135 127.51-62.45 181.378-216.101 120.786-343.531z\" ></path></symbol><symbol id=\"authing-wechatwork-service-provider-authorization\" viewBox=\"0 0 1182 1024\"><path d=\"M993.598 913.02a7.062 7.062 0 0 1 4.908 2.224c15.678 17.761 37.252 31.073 59.816 35.505 15.713 3.354 26.482 18.873 26.482 36.634 0 19.968-14.706 36.617-32.362 36.617-16.666 0-30.402-14.424-32.361-32.185-4.909-25.53-15.714-47.722-30.42-65.466-0.971-1.112-1.942-3.337-2.931-5.561 0-4.432 2.93-7.768 6.868-7.768zM1024 0a105.931 105.931 0 0 1 105.931 105.949v453.42h-70.62V247.172H70.46v670.88h452.026v70.638H32.84C15.572 988.69 0.829 975.448 0 958.27v-857.9C2.79 44.19 49.346 0.053 105.843 0zM812.138 512c136.651 0 247.172 97.774 247.172 219.224h-60.804c0-101.888-85.663-162.286-182.22-163.045-117.565-0.918-189.686 76.182-193.553 157.184-2.471 51.412 16.42 92.495 61.617 127.47 5.032 4.131 4.184 17.479 3.178 23.658l-2.684 37.34s1.006 0 2.013-1.023l49.982-25.141a16.455 16.455 0 0 1 12.058-1.042c22.104 6.18 37.676 5.509 60.787 5.509 24.117 0 46.857-2.066 64.23-8.087l15.589 55.085a288.662 288.662 0 0 1-78.371 11.317c-25.124 0-49.24-3.09-72.334-9.27l-53.265 26.766c-5.014 2.065-12.059 3.09-18.08 3.09-6.037 0-12.058-2.066-17.09-5.138-10.045-7.221-15.06-19.562-14.053-34.993v-1.041l5.014-42.196c-49.222-40.148-76.358-97.775-76.358-157.484C564.966 609.792 675.486 512 812.138 512z m338.397 330.399c17.655 0 32.362 16.649 32.362 36.634 0 18.856-12.747 34.393-28.443 36.617-22.563 5.544-42.178 17.761-57.874 34.41a21.186 21.186 0 0 1-4.908 3.32c-3.92 0-6.868-3.32-6.868-7.769 0-2.225 0.99-4.431 1.978-5.544 15.678-17.76 27.454-42.178 31.373-67.707 2.948-17.744 16.684-29.961 32.38-29.961z m-141.242-30.261c3.92 0 6.868 3.337 6.868 7.768a9.075 9.075 0 0 1-1.977 5.544c-15.678 17.761-27.454 42.178-31.374 67.708-2.948 17.743-16.684 29.96-32.38 29.96-17.654 0-32.361-16.648-32.361-36.634 0-18.856 12.747-34.392 28.442-36.617 22.564-5.544 42.179-17.743 57.874-34.392 0.971-1.113 2.93-2.225 4.908-3.337z m39.23-70.62c16.667 0 30.402 14.424 32.362 32.185 4.908 25.511 15.713 47.722 30.42 65.465 1.942 1.112 1.942 3.337 2.93 5.561 0 4.432-2.93 7.769-6.867 7.769a7.062 7.062 0 0 1-4.908-2.225c-15.696-17.761-37.253-31.073-59.816-35.504-15.713-3.355-26.483-18.874-26.483-36.635 0-19.968 14.707-36.617 32.362-36.617zM511.912 70.584a53.177 53.177 0 0 0-37.5 15.537 53 53 0 0 0 17.426 86.422 53.407 53.407 0 0 0 58.05-11.582 52.824 52.824 0 0 0 11.388-57.838 53.23 53.23 0 0 0-49.364-32.539z m-176.605 0a53.177 53.177 0 0 0-37.5 15.537 53 53 0 0 0 17.426 86.422 53.407 53.407 0 0 0 58.05-11.582 52.824 52.824 0 0 0 11.388-57.838 53.23 53.23 0 0 0-49.364-32.539z m-176.499 0a53.177 53.177 0 0 0-37.5 15.537 53 53 0 0 0 17.426 86.422 53.407 53.407 0 0 0 58.05-11.582 52.824 52.824 0 0 0 11.388-57.838 53.23 53.23 0 0 0-49.364-32.539z\" ></path></symbol><symbol id=\"authing-wechatwork-corp-qrconnect\" viewBox=\"0 0 1220 1024\"><path d=\"M1077.17 663.237c-29.54-34.659-51.2-77.982-61.047-127.803-3.938-34.659-31.508-62.819-64.985-62.819-35.446 0-64.984 32.493-64.984 71.483 0 34.659 21.661 64.985 53.17 71.484 45.291 8.664 88.614 34.658 120.122 69.316 1.97 2.167 5.908 4.333 9.846 4.333 7.877 0 13.785-6.499 13.785-15.163-1.97-4.333-1.97-8.665-5.908-10.831z m-194.955-26.782c1.97-2.166 3.939-6.498 3.939-10.83 0-8.665-5.908-15.163-13.785-15.163-3.938 2.166-7.877 4.332-9.846 6.498-31.508 32.492-70.892 56.32-116.185 67.15-31.507 4.333-57.107 34.66-57.107 71.484 0 38.99 29.538 71.483 64.984 71.483 31.508 0 59.077-23.828 64.985-58.486 7.877-49.822 31.508-97.477 63.015-132.136z m165.416 243.2c31.507-32.492 70.892-56.32 116.184-67.15 31.508-4.333 57.108-34.659 57.108-71.483 0-38.991-29.538-71.484-64.985-71.484-31.507 0-59.076 23.828-64.984 58.487-7.877 49.821-31.508 97.477-63.016 132.135-1.969 2.166-3.938 6.498-3.938 10.83 0 8.665 5.908 15.164 13.785 15.164 3.938-2.166 7.877-4.332 9.846-6.499z m-76.8 1.379c-45.293-8.665-88.616-34.659-120.123-69.317a14.375 14.375 0 0 0-9.846-4.332c-7.877 0-13.785 6.498-13.785 15.163 1.97 4.332 3.938 8.664 5.908 10.83 29.538 34.659 51.2 77.982 61.046 127.804 3.938 34.658 31.507 62.818 64.984 62.818 35.447 0 64.985-32.492 64.985-71.483 0-34.659-21.662-64.985-53.17-71.483z\" ></path><path d=\"M243.554 810.2s2.048 0 4.096-2.067l101.534-50.708c8.172-4.135 16.345-4.135 24.497-2.067 44.899 12.445 76.544 11.106 123.49 11.106 48.995 0 95.174-4.155 130.502-16.325l31.665 111.065c-51.043 14.533-106.142 22.843-159.232 22.843a571.077 571.077 0 0 1-146.964-18.688l-108.19 53.957c-10.2 4.135-24.497 6.222-36.745 6.222-12.249 0-24.497-4.135-34.698-10.377-20.421-14.514-30.622-39.424-28.574-70.558v-2.068l10.201-85.07C55.099 676.51 0 560.285 0 439.926 0 197.12 224.551 0 502.154 0c277.622 0 502.154 197.14 502.154 442.014h-123.55c0-205.43-174.001-327.208-370.196-328.744-238.808-1.85-385.378 153.6-393.216 316.948-4.982 103.62 33.36 186.466 125.224 257.024 10.2 8.31 8.468 35.19 6.44 47.655\" ></path></symbol><symbol id=\"authing-wechatwork-service-provider-qrconnect\" viewBox=\"0 0 1220 1024\"><path d=\"M1077.17 663.237c-29.54-34.659-51.2-77.982-61.047-127.803-3.938-34.659-31.508-62.819-64.985-62.819-35.446 0-64.984 32.493-64.984 71.483 0 34.659 21.661 64.985 53.17 71.484 45.291 8.664 88.614 34.658 120.122 69.316 1.97 2.167 5.908 4.333 9.846 4.333 7.877 0 13.785-6.499 13.785-15.163-1.97-4.333-1.97-8.665-5.908-10.831z m-194.955-26.782c1.97-2.166 3.939-6.498 3.939-10.83 0-8.665-5.908-15.163-13.785-15.163-3.938 2.166-7.877 4.332-9.846 6.498-31.508 32.492-70.892 56.32-116.185 67.15-31.507 4.333-57.107 34.66-57.107 71.484 0 38.99 29.538 71.483 64.984 71.483 31.508 0 59.077-23.828 64.985-58.486 7.877-49.822 31.508-97.477 63.015-132.136z m165.416 243.2c31.507-32.492 70.892-56.32 116.184-67.15 31.508-4.333 57.108-34.659 57.108-71.483 0-38.991-29.538-71.484-64.985-71.484-31.507 0-59.076 23.828-64.984 58.487-7.877 49.821-31.508 97.477-63.016 132.135-1.969 2.166-3.938 6.498-3.938 10.83 0 8.665 5.908 15.164 13.785 15.164 3.938-2.166 7.877-4.332 9.846-6.499z m-76.8 1.379c-45.293-8.665-88.616-34.659-120.123-69.317a14.375 14.375 0 0 0-9.846-4.332c-7.877 0-13.785 6.498-13.785 15.163 1.97 4.332 3.938 8.664 5.908 10.83 29.538 34.659 51.2 77.982 61.046 127.804 3.938 34.658 31.507 62.818 64.984 62.818 35.447 0 64.985-32.492 64.985-71.483 0-34.659-21.662-64.985-53.17-71.483z\" ></path><path d=\"M243.554 810.2s2.048 0 4.096-2.067l101.534-50.708c8.172-4.135 16.345-4.135 24.497-2.067 44.899 12.445 76.544 11.106 123.49 11.106 48.995 0 95.174-4.155 130.502-16.325l31.665 111.065c-51.043 14.533-106.142 22.843-159.232 22.843a571.077 571.077 0 0 1-146.964-18.688l-108.19 53.957c-10.2 4.135-24.497 6.222-36.745 6.222-12.249 0-24.497-4.135-34.698-10.377-20.421-14.514-30.622-39.424-28.574-70.558v-2.068l10.201-85.07C55.099 676.51 0 560.285 0 439.926 0 197.12 224.551 0 502.154 0c277.622 0 502.154 197.14 502.154 442.014h-123.55c0-205.43-174.001-327.208-370.196-328.744-238.808-1.85-385.378 153.6-393.216 316.948-4.982 103.62 33.36 186.466 125.224 257.024 10.2 8.31 8.468 35.19 6.44 47.655\" ></path></symbol><symbol id=\"authing-weibo\" viewBox=\"0 0 1185 1024\"><path d=\"M891.75 466.973c-17.137-5.012-29.37-7.545-19.616-30.019 19.616-47.477 19.616-90 0-120.017-39.18-57.503-144.538-54.97-264.61-2.48 0 0-39.125 17.517-29.37-12.502 19.615-59.982 17.19-109.992-12.234-140.01-66.127-67.473-240.089 2.532-389.532 154.992C63.7 431.942 0 551.96 0 656.996c0 199.94 252.322 322.49 497.314 322.49 323.354 0 536.55-192.503 538.975-347.496 0-92.533-75.934-142.545-144.539-165.017zM499.794 907C303.79 926.941 134.73 836.94 122.497 704.474c-14.714-129.987 134.73-252.484 330.735-272.532 196.005-19.939 365.01 70.06 377.243 202.527 14.712 129.987-134.73 252.484-330.68 272.532z m19.563-375.034c-93.072-25.005-198.43 22.527-240.088 107.515-41.605 87.52 0 182.478 93.125 212.496 97.975 32.497 213.142-17.515 252.322-109.995 39.179-92.53-9.81-185.01-105.359-210.016z m-70.976 219.987c-19.616 30.018-61.22 45-90.645 30.018-29.372-14.982-39.18-50.012-19.617-82.455 19.616-30.07 58.796-42.574 88.22-30.07 29.372 15.034 39.18 50.01 22.042 82.507z m63.7-82.455c-7.329 12.45-22.095 17.461-34.275 12.45-12.287-4.958-17.192-17.462-9.809-29.964 4.85-12.503 19.564-17.515 31.797-12.503 12.288 5.011 17.191 17.515 12.288 29.964z m431.137-327.555a83.964 83.964 0 0 0-14.66-74.963c-19.616-19.994-46.562-30.019-71.029-22.527-22.096 5.012-41.658-9.97-46.563-30.018a40.258 40.258 0 0 1 29.426-47.479c51.412-10.023 107.783 5.012 144.537 47.479a157.904 157.904 0 0 1 31.797 152.514c-7.33 19.994-29.372 32.497-48.988 25.006-19.563-5.012-31.796-27.485-24.466-50.012z m227.908 75.018a44.838 44.838 0 0 1-56.37 30.019c-24.521-7.546-36.755-35.032-29.426-57.504a226.13 226.13 0 0 0-46.508-222.52c-56.372-62.515-137.21-87.52-213.144-70.006a45.108 45.108 0 0 1-53.892-35.029c-4.904-24.952 9.754-49.958 34.276-54.97a312.789 312.789 0 0 1 298.884 97.544c78.413 87.467 98.03 207.485 66.18 312.466z\" ></path></symbol><symbol id=\"authing-github\" viewBox=\"0 0 1024 1024\"><path d=\"M51.57 672.155c3.72-6.605 52.236-29.956 126.057 57.307 0.186 0 0.465 0.14 0.79 0.419 5.21 4.326 29.538 39.26 43.307 51.865 58.935 53.307 147.083 12.001 157.13 6.047 4.652-38.282 19.025-68.378 43.027-90.52a290.072 290.072 0 0 1-64.052-10.047 203.832 203.832 0 0 1-61.029-18.048 168.852 168.852 0 0 1-58.052-29.165c-17.35-9.35-33.677-23.444-49.027-42.237a205.367 205.367 0 0 1-40.004-58.284c-10.698-20.095-19.071-45.911-25.072-77.356-6-28.84-8.977-62.005-8.977-99.543 0-68.983 22.979-129.64 69.076-181.924-2.745-5.395-33.026-77.17 7.907-179.969 55.447-1.954 115.173 23.49 185.226 68.332A925.198 925.198 0 0 1 547.008 46.89c56.936 1.907 113.592 9.303 169.132 22.142C739.49 54.984 821.637-1.3 900.249 2.747c37.678 89.45 11.024 170.154 6.977 178.9 46.05 46.236 69.076 104.846 69.076 175.875v6.047c0.326 5.024 0.512 10.094 0.512 15.118 0 27.77-3.163 55.958-9.536 84.473a349.24 349.24 0 0 1-25.025 77.402 282.816 282.816 0 0 1-39.027 57.26 367.242 367.242 0 0 1-49.028 41.26c-18.42 10.56-37.445 20.002-57.074 28.142a1890.865 1890.865 0 0 1-61.076 18.048 1650.986 1650.986 0 0 0-64.052 10.048c30.05 25.49 45.4 66.982 46.05 124.662a3242.148 3242.148 0 0 0-0.464 55.54c0 19.583 0.186 40.282 0.465 62.052-0.651 21.444-0.93 37.724-0.93 48.795 0 11.07 0.279 16.931 0.93 17.536a677.27 677.27 0 0 1-159.084 20.048h-14.978c-54.424 0-107.452-6.651-159.177-20.14-0.698-0.652-0.977-39.214-0.977-115.546-20.7 4.652-157.037 31.538-217.508-69.913-19.304-30.05-35.351-103.405-100.753-136.152-6.93 18.048-28.84 2.652-14-10.047z\" ></path></symbol></svg>'\n","import React, { FC } from 'react'\nimport { getClassnames } from '../../_utils'\nimport './iconfont'\nimport './style.less'\n\nexport const IconFont: FC<{\n type: string\n style?: React.CSSProperties\n className?: string\n}> = ({ type, style, className }) => {\n return (\n <svg\n style={{ ...style }}\n className={getClassnames(['authing-icon', className])}\n >\n <use xlinkHref={`#${type}`}></use>\n </svg>\n )\n}\n","import React from 'react'\nimport { ImagePro } from '../ImagePro'\nimport { GuardErrorViewProps } from './interface'\n\nimport './styles.less'\n\nexport const GuardErrorView: React.FC<GuardErrorViewProps> = (props) => {\n const messages = props?.initData?.messages\n ? `出错了~:${props?.initData?.messages} `\n : `未知的错误~ 请您联系管理员进行处理`\n const imgSrc = require('../assets/images/error.png').default\n\n return (\n <div className=\"g2-view-container\">\n <div className=\"g2-error-content\">\n <ImagePro width={240} height={162} src={imgSrc} alt=\"guard error img\" />\n <span>{messages}</span>\n </div>\n </div>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { useTranslation } from 'react-i18next'\nimport { GuardModuleType } from '..'\nimport { ImagePro } from '../ImagePro'\nimport SubmitButton from '../SubmitButton'\nimport { GuardSubmitSuccessViewProps } from './interface'\n\nexport const GuardSubmitSuccessView: React.FC<GuardSubmitSuccessViewProps> = (\n props\n) => {\n const { t } = useTranslation()\n const { initData, config } = props\n const [countDown, setCountDown] = useState(5)\n\n const timerRef = useRef<any>(0)\n\n const {\n title = t('common.problem.successTip'),\n message = t('common.problem.successTipMsg'),\n } = initData ?? {}\n\n const cdnBase = config?.__publicConfig__?.cdnBase\n\n useEffect(() => {\n timerRef.current = setInterval(() => {\n setCountDown((prev) => {\n return prev - 1\n })\n }, 1000)\n\n return () => clearInterval(timerRef.current)\n }, [])\n\n useEffect(() => {\n if (countDown <= 0) {\n clearInterval(timerRef.current)\n props.__changeModule?.(GuardModuleType.LOGIN)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [countDown])\n\n return (\n <div className=\"g2-view-container\">\n <div className=\"g2-view-tabs g2-questions-send-success-page\">\n <ImagePro\n className=\"plate\"\n src={`${cdnBase}/questions-send-ok.png`}\n alt=\"\"\n width={191}\n height={146}\n />\n <div className=\"title\">{title}</div>\n <div className=\"message\">{message}</div>\n <SubmitButton\n onClick={() => {\n props.__changeModule?.(GuardModuleType.LOGIN)\n }}\n text={t('common.backLoginPage')}\n />\n <div className=\"timer-tip\">\n {countDown} {t('common.pToLogin')}\n </div>\n </div>\n </div>\n )\n}\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useReducer,\n useState,\n} from 'react'\nimport { ConfigProvider, message, Modal } from 'antd'\n\nimport { GuardLoginView } from '../Login'\n\nimport { initAuthClient } from './authClient'\nimport { GuardEvents, guardEventsFilter } from './event'\nimport { initConfig } from '../_utils/config'\nimport { insertStyles } from '../_utils'\nimport { initGuardHttp } from '../_utils/guradHttp'\nimport { initI18n } from '..//_utils/locales'\nimport { IG2FCProps } from '../Type'\nimport { getDefaultGuardLocalConfig, GuardLocalConfig } from './config'\nimport { ShieldSpin } from '../ShieldSpin'\nimport { GuardModuleType } from './module'\nimport { GuardMFAView } from '../MFA'\nimport { GuardRegisterView } from '../Register'\nimport { GuardDownloadATView } from '../DownloadAuthenticator'\nimport { GuardStateMachine, useHistoryHijack } from './stateMachine'\nimport { GuardBindTotpView } from '../BindTotp'\nimport { GuardForgetPassword } from '../ForgetPassword'\nimport { GuardChangePassword } from '../ChangePassword'\nimport { GuardNeedHelpView } from '../NeedHelpView'\nimport { GuardCompleteInfoView } from '../CompleteInfo'\nimport { GuardRecoveryCodeView } from '../RecoveryCode'\nimport './styles.less'\nimport { IconFont } from '../AuthingGuard/IconFont'\nimport { GuardErrorView } from '../Error'\nimport { GuardMode } from '..'\nimport { GuardSubmitSuccessView } from '../SubmitSuccess'\n\nconst PREFIX_CLS = 'authing-ant'\n\nmessage.config({\n prefixCls: `${PREFIX_CLS}-message`,\n})\n\nconst ComponentsMapping: Record<\n GuardModuleType,\n (props: GuardViewProps) => React.ReactNode\n> = {\n [GuardModuleType.ERROR]: (props) => <GuardErrorView {...props} />,\n [GuardModuleType.LOGIN]: (props) => <GuardLoginView {...props} />,\n [GuardModuleType.MFA]: (props) => <GuardMFAView {...props} />,\n [GuardModuleType.REGISTER]: (props) => <GuardRegisterView {...props} />,\n [GuardModuleType.DOWNLOAD_AT]: (props) => <GuardDownloadATView {...props} />,\n [GuardModuleType.FORGET_PWD]: (props) => <GuardForgetPassword {...props} />,\n [GuardModuleType.CHANGE_PWD]: (props) => <GuardChangePassword {...props} />,\n [GuardModuleType.BIND_TOTP]: (props) => <GuardBindTotpView {...props} />,\n [GuardModuleType.ANY_QUESTIONS]: (props) => <GuardNeedHelpView {...props} />,\n [GuardModuleType.COMPLETE_INFO]: (props) => (\n <GuardCompleteInfoView {...props} />\n ),\n [GuardModuleType.RECOVERY_CODE]: (props) => (\n <GuardRecoveryCodeView {...props} />\n ),\n [GuardModuleType.SUBMIT_SUCCESS]: (props) => (\n <GuardSubmitSuccessView {...props} />\n ),\n}\n\nexport interface GuardProps extends GuardEvents, IG2FCProps {\n tenantId?: string\n config?: Partial<GuardLocalConfig>\n visible?: boolean\n}\n\ninterface GuardViewProps extends GuardProps {\n config: GuardLocalConfig\n initData: any\n}\n\ninterface IBaseAction<T = string, P = any> {\n type: T & string\n payload?: Partial<P>\n}\n\ninterface ModuleState {\n moduleName: GuardModuleType\n initData: any\n}\n\nexport const Guard = (props: GuardProps) => {\n const { appId, tenantId, config } = props\n // 整合一下 所有的事件\n const events = guardEventsFilter(props)\n\n // 初始化 Loading 标识\n const [initSettingEnd, setInitSettingEnd] = useState(false)\n\n const [initError, setInitError] = useState(false)\n const [errorMessage, setErrorMessage] = useState('')\n\n // Config\n const [GuardLocalConfig, setGuardLocalConfig] = useState<GuardLocalConfig>(\n getDefaultGuardLocalConfig()\n )\n\n // 状态机\n const [\n guardStateMachine,\n setGuardStateMachine,\n ] = useState<GuardStateMachine>()\n\n // 劫持浏览器 History\n const [historyNext] = useHistoryHijack(guardStateMachine?.back)\n\n // 首页 init 数据\n const initState: ModuleState = {\n moduleName: GuardModuleType.LOGIN,\n initData: {},\n }\n\n // modules 定义\n const moduleReducer: (\n state: ModuleState,\n action: IBaseAction<GuardModuleType, ModuleState>\n ) => ModuleState = (state, { type, payload }) => {\n return {\n moduleName: type,\n initData: payload?.initData,\n }\n }\n\n // Modules Reducer\n const [moduleState, changeModule] = useReducer(moduleReducer, initState)\n\n // 切换 Module\n const onChangeModule = (moduleName: GuardModuleType, initData: any = {}) => {\n changeModule({\n type: moduleName,\n payload: {\n initData: initData ?? {},\n },\n })\n }\n\n // 初始化 Guard 一系列的东西\n const initGuardSetting = useCallback(async () => {\n try {\n // Rest 初始化\n const httpClient = initGuardHttp(\n config?.host ?? getDefaultGuardLocalConfig().host\n )\n httpClient.setAppId(appId)\n tenantId && httpClient.setTenantId(tenantId)\n\n // Config 初始化\n const { config: mergedConfig, publicConfig } = await initConfig(\n appId,\n config ?? {},\n getDefaultGuardLocalConfig()\n )\n\n httpClient.setUserpoolId(publicConfig.userPoolId)\n setGuardLocalConfig(mergedConfig)\n\n // TODO 国际化 这部分有点小问题 等待优化\n initI18n({}, mergedConfig.lang)\n\n // Authing JS SDK\n const authClient = initAuthClient(mergedConfig, appId, tenantId)\n\n events?.onLoad?.(authClient)\n\n // 状态机 初始化\n const guardStateMachine = new GuardStateMachine(onChangeModule, initState)\n guardStateMachine.setConfig(mergedConfig)\n setGuardStateMachine(guardStateMachine)\n } catch (error: any) {\n events?.onLoadError?.(error)\n\n setErrorMessage(error.message)\n setInitError(true)\n\n console.error(error)\n } finally {\n // 初始化 结束\n setInitSettingEnd(true)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n initGuardSetting()\n console.log('useEffect')\n }, [initGuardSetting])\n\n useEffect(() => {\n insertStyles(GuardLocalConfig.contentCss)\n }, [GuardLocalConfig.contentCss])\n\n const renderModule = useMemo(() => {\n if (initSettingEnd) {\n if (initError)\n return <GuardErrorView initData={{ messages: errorMessage }} />\n return ComponentsMapping[moduleState.moduleName]({\n appId,\n initData: moduleState.initData,\n config: GuardLocalConfig,\n ...events,\n __changeModule: (moduleName, initData) => {\n historyNext(initData)\n guardStateMachine?.next(moduleName, initData)\n },\n })\n } else {\n return (\n <div className=\"g2-init-setting-loading\">\n <ShieldSpin size={100} />\n </div>\n )\n }\n }, [\n appId,\n errorMessage,\n events,\n GuardLocalConfig,\n guardStateMachine,\n historyNext,\n initError,\n initSettingEnd,\n moduleState.initData,\n moduleState.moduleName,\n ])\n\n return (\n // TODO 这部分缺失 Loging 态\n <ConfigProvider prefixCls={PREFIX_CLS}>\n {config?.mode === GuardMode.Modal ? (\n <Modal\n className=\"authing-g2-render-module-modal\"\n closeIcon={\n <IconFont type=\"authing-close-line\" className=\"g2-modal-close\" />\n }\n visible={props.visible}\n onCancel={props.onClose}\n keyboard={config.escCloseable}\n maskClosable={false} //点击蒙层,是否允许关闭\n getContainer={config.target ? config.target : false}\n >\n <div className=\"authing-g2-render-module\">{renderModule}</div>\n </Modal>\n ) : (\n <div className=\"authing-g2-render-module\">{renderModule}</div>\n )}\n </ConfigProvider>\n )\n}\n","import React from 'react'\n\n// create context with no upfront defaultValue\n// without having to do undefined check all the time\nexport function createBaseContext<C>() {\n const ctx = React.createContext<C | undefined>(undefined)\n function useBaseContext() {\n const ctxConst = React.useContext(ctx)\n if (!ctxConst)\n throw new Error('useBaseContext must be inside a Provider with a value')\n return ctxConst\n }\n // make TypeScript infer a tuple, not an array of union types\n return [ctx, useBaseContext] as const\n}\n\nexport interface IBaseAction<ActionType = string> {\n type: ActionType & string\n payload?: any\n [key: string]: string\n}\n\nexport interface IBaseContext<S> {\n state: S\n [k: string]: any\n}\n\nexport type BaseContextComponent<Props> = React.PropsWithChildren<Props>\n","import {\n GuardConfig,\n ActiveTabs,\n GuardScenes,\n UserConfig,\n GuardEventsHandler,\n LocalesConfig,\n Lang,\n} from '../../AuthingGuard/types'\nimport { AuthenticationClient } from 'authing-js-sdk'\nimport { IBaseAction } from '../base'\nimport { ApplicationMfaType } from '../../AuthingGuard/api/appConfig'\n\nexport type IState = {\n config: GuardConfig // 处理后的 Guard 配置\n userConfig: UserConfig // 用户传入的配置\n authClient: AuthenticationClient\n activeTabs: ActiveTabs // 登录、注册方式\n guardScenes: GuardScenes // 当前在哪个界面\n guardTitle: string\n // 需要 mfa 登录时后端返回的错误信息\n mfaData: {\n mfaToken: string\n phone?: string\n email?: string\n applicationMfa?: {\n status: 0 | 1\n mfaPolicy: ApplicationMfaType\n sort: number\n }[]\n }\n userPoolId: string\n appId: string\n guardEvents: GuardEventsHandler\n localesConfig: LocalesConfig\n lang?: Lang\n realHost: string\n}\n\nconst handlers: any = {\n // eslint-disable-next-line\n ['SET_VALUE']: (state: IState, payloads: any) => {\n return {\n ...state,\n [payloads.key]: payloads.value,\n }\n },\n}\n\nexport const reducer = (state: IState, { type, ...payloads }: IBaseAction) => {\n const handler = handlers[type]\n if (handler) {\n return handler(state, payloads)\n }\n return state\n}\n","import React, { useCallback, useReducer } from 'react'\nimport { createBaseContext, IBaseContext, BaseContextComponent } from '../base'\nimport { reducer, IState } from './reducer'\n\n// 页面上下文,除了状态外还有公开的方法\nexport interface IGuardContext extends IBaseContext<IState> {\n dispatch: Function\n getValue: (key: keyof IState) => any\n setValue: (key: keyof IState, value: any) => void\n}\n\n// 实例化上下文,这里避免了为空检查\nconst [Context, useBaseContext] = createBaseContext<IGuardContext>()\n\nexport function useGuardContext(): IGuardContext {\n const guardContext = useBaseContext()\n // TODO: custom some\n return guardContext\n}\n\nexport function GuardContext({\n children = null,\n value,\n}: BaseContextComponent<Record<string, any>>) {\n const [state, dispatch] = useReducer(reducer, value)\n const getValue = (key: keyof IState) => state[key]\n const setValue = useCallback((key: keyof IState, value: any) => {\n dispatch({ type: 'SET_VALUE', key, value })\n }, [])\n\n let ctx: IGuardContext = {\n state,\n dispatch,\n getValue,\n setValue,\n }\n\n return <Context.Provider value={ctx}>{children}</Context.Provider>\n}\n","/**\n * 在屏幕中心弹出新窗口加载 url\n * @param url\n * @param param1\n */\nexport const popupCenter = (\n url: string,\n { w, h }: { w: number; h: number } = { w: 585, h: 649 }\n) => {\n // Fixes dual-screen position Most browsers Firefox\n const dualScreenLeft =\n window.screenLeft !== undefined ? window.screenLeft : window.screenX\n const dualScreenTop =\n window.screenTop !== undefined ? window.screenTop : window.screenY\n\n const width = window.innerWidth\n ? window.innerWidth\n : document.documentElement.clientWidth\n ? document.documentElement.clientWidth\n : window.screen.width\n const height = window.innerHeight\n ? window.innerHeight\n : document.documentElement.clientHeight\n ? document.documentElement.clientHeight\n : window.screen.height\n\n const systemZoom = width / window.screen.availWidth\n const left = (width - w) / 2 / systemZoom + dualScreenLeft\n const top = (height - h) / 2 / systemZoom + dualScreenTop\n const newWindow = window.open(\n url,\n '_blank',\n `\n toolbar=no,\n menubar=no,\n scrollbars=no,\n resizable=no,\n location=no,\n status=no\n width=${w / systemZoom}, \n height=${h / systemZoom}, \n top=${top}, \n left=${left}\n `\n )\n\n newWindow?.focus()\n}\n","import { useEffect } from 'react'\nimport { Rule } from 'antd/lib/form'\nimport qs from 'qs'\nimport { useGuardContext } from '../context/global/context'\nimport { i18n } from './locales'\n\nexport * from './popupCenter'\nexport * from './clipboard'\n\nexport const VALIDATE_PATTERN = {\n // https://emailregex.com/\n // eslint-disable-next-line no-control-regex\n email: /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n // 以下的来自 authing-user-portal 项目\n phone: /^1[3-9]\\d{9}$/,\n ip: /^((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3}$/,\n host: /^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?$/,\n} as const\n\nexport const validate = (type: keyof typeof VALIDATE_PATTERN, val: string) => {\n return VALIDATE_PATTERN[type].test(val)\n}\n\nexport const getRequiredRules = (msg: string): Rule[] => {\n return [\n {\n required: true,\n message: msg,\n },\n ]\n}\n\nexport const fieldRequiredRule = (fieldRequiredRule: string): Rule[] => {\n return [\n {\n required: true,\n message: i18n.t('common.isMissing', {\n name: fieldRequiredRule,\n }),\n },\n ]\n}\n\nexport function getDeviceName() {\n if (typeof window === 'undefined') {\n return null\n }\n\n const userAgent = window.navigator.userAgent\n const platform = window.navigator.platform\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K']\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']\n const iosPlatforms = ['iPhone', 'iPad', 'iPod']\n\n let os = null\n\n if (macosPlatforms.indexOf(platform) !== -1) {\n os = 'Mac OS'\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n os = 'iOS'\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n os = 'Windows'\n } else if (/Android/.test(userAgent)) {\n os = 'Android'\n } else if (!os && /Linux/.test(platform)) {\n os = 'Linux'\n }\n\n return os\n}\n\nexport type STYLE_RECORD_KEY = 'appConfig' | 'userConfig'\n\n/**\n * 传对象 {'background-color': 'red'}\n * 传字符串 \"CSS 样式\"\n */\nconst insertedRecord: Record<STYLE_RECORD_KEY, any> = {\n appConfig: null,\n userConfig: null,\n}\nexport const insertStyles = (\n styles: string | any,\n recordKey?: STYLE_RECORD_KEY\n) => {\n let styleElt, styleSheet\n if ((document as any).createStyleSheet) {\n // IE\n styleSheet = (document as any).createStyleSheet()\n } else {\n let head = document.getElementsByTagName('head')[0]\n styleElt = document.createElement('style')\n head.appendChild(styleElt)\n styleSheet = document.styleSheets[document.styleSheets.length - 1]\n }\n if (typeof styles === 'string') {\n if (styleElt) styleElt.innerHTML = styles\n else styleSheet.cssText = styles // IE\n } else {\n let i = 0\n for (let selector in styles) {\n if (styleSheet.insertRule) {\n let rule = selector + ' {' + styles[selector] + '}'\n styleSheet.insertRule(rule, i++)\n } else {\n styleSheet.addRule(selector, styles[selector], i++)\n }\n }\n }\n\n if (recordKey) {\n insertedRecord[recordKey] = styleElt\n }\n}\n\nexport const removeStyles = (recordKey: STYLE_RECORD_KEY) => {\n if (!insertedRecord[recordKey]) {\n return\n }\n\n const styleElt = insertedRecord[recordKey]\n\n styleElt.parentNode?.removeChild(styleElt)\n\n insertedRecord[recordKey] = null\n}\n\nexport const useTitle = (title: string, prefix?: string) => {\n const {\n state: { config },\n } = useGuardContext()\n\n useEffect(() => {\n document.title = `${prefix ?? `${config.title} `} ${title}`\n }, [config.title, prefix, title])\n}\n\nexport const getClassnames = (classnames: (string | boolean | undefined)[]) => {\n return classnames.filter(Boolean).join(' ')\n}\n\n/**\n * https://www.itranslater.com/qa/details/2115518846294557696\n * Simple object check.\n * @param item\n * @returns {boolean}\n */\nexport function isObject(item: any) {\n return item && typeof item === 'object' && !Array.isArray(item)\n}\n\n/**\n * https://www.itranslater.com/qa/details/2115518846294557696\n * Deep merge two objects.\n * @param target\n * @param ...sources\n */\nexport function deepMerge<T extends any = any>(\n target: T,\n ...sources: any[]\n): T {\n if (!sources.length) return target\n const source = sources.shift()\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n // @ts-ignore\n if (!target[key]) {\n Object.assign(target, { [key]: {} })\n }\n // @ts-ignore\n deepMerge(target[key], source[key])\n } else {\n Object.assign(target, { [key]: source[key] })\n }\n }\n }\n\n return deepMerge(target, ...sources)\n}\n\nexport const getUserRegisterParams = () => {\n const query = qs.parse(window.location.search, {\n ignoreQueryPrefix: true,\n })\n return Object.keys(query).map((key) => ({\n key,\n value: query[key],\n }))\n}\n\nexport const isWechatBrowser = () =>\n /MicroMessenger/i.test(navigator?.userAgent)\n\nexport const assembledAppHost = (identifier: string, host: string) => {\n const hostUrl = new URL(host)\n\n const splitHost = hostUrl.hostname.split('.')\n\n splitHost.shift()\n\n return `${hostUrl.protocol}//${identifier}.${splitHost.join('.')}`\n}\n\nexport enum PasswordStrength {\n NoCheck,\n Low,\n Middle,\n High,\n AUTO,\n}\n\nexport const PASSWORD_STRENGTH_TEXT_MAP: Record<\n PasswordStrength,\n {\n placeholder: () => string\n validateMessage: () => string\n }\n> = {\n [PasswordStrength.NoCheck]: {\n placeholder: () => i18n.t('login.inputPwd'),\n validateMessage: () => i18n.t('login.inputPwd'),\n },\n [PasswordStrength.Low]: {\n placeholder: () => i18n.t('login.setPwdLimit1'),\n validateMessage: () => i18n.t('login.setPwdLimitMsg1'),\n },\n [PasswordStrength.Middle]: {\n placeholder: () => i18n.t('login.login.setPwdLimit2'),\n validateMessage: () => i18n.t('login.setPwdLimitMsg2'),\n },\n [PasswordStrength.High]: {\n placeholder: () => i18n.t('login.login.setPwdLimit3'),\n validateMessage: () => i18n.t('login.setPwdLimitMsg3'),\n },\n [PasswordStrength.AUTO]: {\n placeholder: () => i18n.t('login.inputPwd'),\n validateMessage: () => i18n.t('login.inputPwd'),\n },\n}\n\nconst SYMBOL_TYPE_PATTERNS = [\n /\\d+/,\n /[a-zA-Z]/,\n /[-!$%^&*()_+|~=`{}[\\]:\";'<>?,@./]/,\n]\n\nexport const getSymbolTypeLength = (pwd: string) => {\n return SYMBOL_TYPE_PATTERNS.map((pattern) => pattern.test(pwd)).filter(\n (item) => item\n ).length\n}\n\nexport const getPasswordValidate = (\n strength: PasswordStrength = PasswordStrength.NoCheck,\n customPasswordStrength: any = {}\n): Rule[] => {\n const required = fieldRequiredRule(i18n.t('common.password'))[0]\n\n const validateMap: Record<PasswordStrength, Rule[]> = {\n [PasswordStrength.NoCheck]: [required],\n [PasswordStrength.Low]: [\n required,\n {\n validator(r, v) {\n if (v && v.length < 6) {\n return Promise.reject(\n PASSWORD_STRENGTH_TEXT_MAP[PasswordStrength.Low].validateMessage()\n )\n }\n return Promise.resolve()\n },\n },\n ],\n [PasswordStrength.Middle]: [\n required,\n {\n validator(r, v) {\n if (v && (v.length < 6 || getSymbolTypeLength(v) < 2)) {\n return Promise.reject(\n PASSWORD_STRENGTH_TEXT_MAP[\n PasswordStrength.Middle\n ].validateMessage()\n )\n }\n return Promise.resolve()\n },\n },\n ],\n [PasswordStrength.High]: [\n required,\n {\n validator(r, v) {\n if (v && (v.length < 6 || getSymbolTypeLength(v) < 3)) {\n console.log(\n PASSWORD_STRENGTH_TEXT_MAP[PasswordStrength.High].validateMessage\n )\n return Promise.reject(\n PASSWORD_STRENGTH_TEXT_MAP[\n PasswordStrength.High\n ].validateMessage()\n )\n }\n return Promise.resolve(true)\n },\n },\n ],\n [PasswordStrength.AUTO]: [\n required,\n {\n pattern: customPasswordStrength?.regex,\n message: customPasswordStrength?.message,\n },\n ],\n }\n\n return validateMap[strength]\n}\n\nexport const sleep = (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay))\n","import {\n AuthenticationClient,\n AuthenticationClientOptions,\n CommonMessage,\n SocialConnectionProvider,\n User,\n} from 'authing-js-sdk'\nimport { QrCodeAuthenticationClient } from 'authing-js-sdk/build/main/lib/authentication/QrCodeAuthenticationClient'\n\nimport {\n SocialConnectionItem,\n EnterpriseConnectionItem,\n ApplicationConfig,\n PasswordLoginMethods,\n Agreement,\n} from '../api'\nimport { Lang } from './Locales'\n\nexport type { AuthenticationClient, CommonMessage, User } from 'authing-js-sdk'\n\nexport enum GuardMode {\n Modal = 'modal',\n Normal = 'normal',\n}\n\nexport enum LoginMethods {\n LDAP = 'ldap',\n AppQr = 'app-qrcode',\n Password = 'password',\n PhoneCode = 'phone-code',\n WxMinQr = 'wechat-miniprogram-qrcode', // 对应社会化登录的 wechat:miniprogram:qrconnect(小程序扫码登录)\n AD = 'ad', // 对应企业身份源的 Windows AD 登录\n WechatMpQrcode = 'wechatmp-qrcode', // 微信扫码关注登录\n}\n\nexport enum RegisterMethods {\n Email = 'email',\n Phone = 'phone',\n}\n\nexport enum GuardScenes {\n Login = 'login',\n Register = 'register',\n MfaVerify = 'mfaVerify',\n AppMfaVerify = 'appMfaVerify',\n RestPassword = 'restPassword',\n CompleteUserInfo = 'completeUserInfo',\n}\n\nexport enum ResetPwdMethods {\n Email = 'email',\n Phone = 'phone',\n}\n\nexport enum SocialConnections {\n Qq = 'qq',\n Weibo = 'weibo',\n Github = 'github',\n Google = 'google',\n WxPc = 'wechat:pc',\n Dingtalk = 'dingtalk',\n WxWCorpQr = 'wechatwork:corp:qrconnect',\n WxWSPQr = 'wechatwork:service-provider:qrconnect',\n WxWSPAuth = 'wechatwork:service-provider:authorization',\n AlipayWeb = 'alipay:web',\n AppleWeb = 'apple:web',\n Baidu = 'baidu',\n LarkInternalApp = 'lark-internal',\n LarkMarketPlaceApp = 'lark-public',\n}\n\nexport enum Protocol {\n AD = 'ad',\n CAS = 'cas',\n LDAP = 'ldap',\n OIDC = 'oidc',\n SAML = 'saml',\n OAUTH = 'oauth',\n AZURE_AD = 'azure-ad',\n}\n\n// export enum GuardEventsKebab {\n// // 加载完成,userPool 配置和应用配置(如果有 appId)加载完成\n// Load = 'load',\n// // 加载失败\n// LoadError = 'load-error',\n// // 用户登录成功\n// Login = 'login',\n// // 用户登录失败\n// LoginError = 'login-error',\n// // 注册成功\n// Register = 'register',\n// // 注册失败\n// RegisterError = 'register-error',\n// // 忘记密码邮件发送成功\n// PwdEmailSend = 'pwd-email-send',\n// // 忘记密码邮件发送失败\n// PwdEmailSendError = 'pwd-email-send-error',\n// // 忘记密码手机验证码发送成功\n// PwdPhoneSend = 'pwd-phone-send',\n// // 忘记密码手机验证码发送失败\n// PwdPhoneSendError = 'pwd-phone-send-error',\n// // 重置密码成功\n// PwdReset = 'pwd-reset',\n// // 重置密码失败\n// PwdResetError = 'pwd-reset-error',\n// // 表单关闭事件\n// Close = 'close',\n// }\n\n// export interface GuardEventsCamelCase {\n// // 加载完成,userPool 配置和应用配置(如果有 appId)加载完成\n// [GuardEvents.Load]: 'onLoad'\n// // 加载失败\n// [GuardEvents.LoadError]: 'onLoadError'\n// // 用户登录成功\n// [GuardEvents.Login]: 'onLogin'\n// // 用户登录失败\n// [GuardEvents.LoginError]: 'onLoginError'\n// // 注册成功\n// [GuardEvents.Register]: 'onRegister'\n// // 注册失败\n// [GuardEvents.RegisterError]: 'onRegisterError'\n// // 忘记密码邮件发送成功\n// [GuardEvents.PwdEmailSend]: 'onPwdEmailSend'\n// // 忘记密码邮件发送失败\n// [GuardEvents.PwdEmailSendError]: 'onPwdEmailSendError'\n// // 忘记密码手机验证码发送成功\n// [GuardEvents.PwdPhoneSend]: 'onPwdPhoneSend'\n// // 忘记密码手机验证码发送失败\n// [GuardEvents.PwdPhoneSendError]: 'onPwdPhoneSendError'\n// // 重置密码成功\n// [GuardEvents.PwdReset]: 'onPwdReset'\n// // 重置密码失败\n// [GuardEvents.PwdResetError]: 'onPwdResetError'\n// // 表单关闭事件\n// [GuardEvents.Close]: 'onClose'\n// }\n\n// export enum GuardEvents {\n// // 加载完成,userPool 配置和应用配置(如果有 appId)加载完成\n// Load = 'onLoad',\n// // 加载失败\n// LoadError = 'onLoadError',\n// // 用户登录成功\n// Login = 'onLogin',\n// // 用户登录失败\n// LoginError = 'onLoginError',\n// // 注册成功\n// Register = 'onRegister',\n// // 注册失败\n// RegisterError = 'onRegisterError',\n// // 忘记密码邮件发送成功\n// PwdEmailSend = 'onPwdEmailSend',\n// // 忘记密码邮件发送失败\n// PwdEmailSendError = 'onPwdEmailSendError',\n// // 忘记密码手机验证码发送成功\n// PwdPhoneSend = 'onPwdPhoneSend',\n// // 忘记密码手机验证码发送失败\n// PwdPhoneSendError = 'onPwdPhoneSendError',\n// // 重置密码成功\n// PwdReset = 'onPwdReset',\n// // 重置密码失败\n// PwdResetError = 'onPwdResetError',\n// // 表单关闭事件\n// Close = 'onClose',\n// }\n\nexport const GuardEventsCamelToKebabMap = {\n onLoad: 'load',\n onLoadError: 'load-error',\n onLogin: 'login',\n onBeforeLogin: 'before-login',\n onLoginError: 'login-error',\n onRegister: 'register',\n onBeforeRegister: 'before-register',\n onRegisterError: 'register-error',\n onPwdEmailSend: 'pwd-email-send',\n onPwdEmailSendError: 'pwd-email-send-error',\n onPwdPhoneSend: 'pwd-phone-send',\n onPwdPhoneSendError: 'pwd-phone-send-error',\n onPwdReset: 'pwd-reset',\n onPwdResetError: 'pwd-reset-error',\n onClose: 'close',\n onLoginTabChange: 'login-tab-change',\n onRegisterTabChange: 'register-tab-change',\n onRegisterInfoCompleted: 'register-info-completed',\n onRegisterInfoCompletedError: 'register-info-completed-error',\n} as const\n\nexport interface GuardEventsHandlerKebab {\n // 加载完成,userPool 配置和应用配置(如果有 appId)加载完成\n load: GuardEventsHandler['onLoad']\n // 加载失败\n 'load-error': GuardEventsHandler['onLoadError']\n // 登录前,即表单校验完成,请求接口前\n 'before-login': GuardEventsHandler['onBeforeLogin']\n // 用户登录成功\n login: GuardEventsHandler['onLogin']\n // 用户登录失败\n 'login-error': GuardEventsHandler['onLoginError']\n // 注册前,即表单校验完成,请求接口前\n 'before-register': GuardEventsHandler['onBeforeRegister']\n // 注册成功\n register: GuardEventsHandler['onRegister']\n // 注册失败\n 'register-error': GuardEventsHandler['onRegisterError']\n // 忘记密码邮件发送成功\n 'pwd-email-send': GuardEventsHandler['onPwdEmailSend']\n // 忘记密码邮件发送失败\n 'pwd-email-send-error': GuardEventsHandler['onPwdEmailSendError']\n // 忘记密码手机验证码发送成功\n 'pwd-phone-send': GuardEventsHandler['onPwdPhoneSend']\n // 忘记密码手机验证码发送失败\n 'pwd-phone-send-error': GuardEventsHandler['onPwdPhoneSendError']\n // 重置密码成功\n 'pwd-reset': GuardEventsHandler['onPwdReset']\n // 重置密码失败\n 'pwd-reset-error': GuardEventsHandler['onPwdResetError']\n // 表单关闭事件\n close: GuardEventsHandler['onClose']\n // 登录的 tab 切换\n 'login-tab-change': GuardEventsHandler['onLoginTabChange']\n // 注册的 tab 切换\n 'register-tab-change': GuardEventsHandler['onRegisterTabChange']\n // 注册信息补充完毕\n 'register-info-completed': GuardEventsHandler['onRegisterInfoCompleted']\n // 注册信息补充失败\n 'register-info-completed-error': GuardEventsHandler['onRegisterInfoCompletedError']\n}\n\nexport interface PasswordLoginParams {\n type: LoginMethods.Password\n data: {\n // 标识,可能是用户名、邮箱、手机号\n identity: string\n // 密码\n password: string\n // 图形验证码\n captchaCode?: string\n }\n}\n\nexport interface LDAPLoginParams {\n type: LoginMethods.LDAP\n data: {\n // 标识,可能是用户名、邮箱、手机号\n identity: string\n // 密码\n password: string\n // 图形验证码\n captchaCode?: string\n }\n}\n\nexport interface ADLoginParams {\n type: LoginMethods.AD\n data: {\n // 标识,可能是用户名、邮箱、手机号\n identity: string\n // 密码\n password: string\n }\n}\n\nexport interface PhoneCodeLoginParams {\n type: LoginMethods.PhoneCode\n data: {\n // 手机号\n phone: string\n // 手机验证码\n code: string\n }\n}\n\nexport interface EmailRegisterParams {\n type: RegisterMethods.Email\n data: {\n // 邮箱\n email: string\n // 密码\n password: string\n }\n}\n\nexport interface PhoneRegisterParams {\n type: RegisterMethods.Phone\n data: {\n // 手机号\n phone: string\n // 密码\n password: string\n // 手机验证码\n code: string\n }\n}\n\nexport interface GuardEventsHandler {\n onLoad?: (authClient: AuthenticationClient) => void\n onLoadError?: (error: CommonMessage) => void\n onBeforeLogin?: (\n loginInfo:\n | PasswordLoginParams\n | LDAPLoginParams\n | ADLoginParams\n | PhoneCodeLoginParams,\n authClient: AuthenticationClient\n ) => boolean | Promise<boolean>\n onLogin?: (user: User, authClient: AuthenticationClient) => void\n onLoginError?: (user: User, authClient: AuthenticationClient) => void\n onBeforeRegister?: (\n registerInfo: EmailRegisterParams | PhoneRegisterParams,\n authClient: AuthenticationClient\n ) => boolean | Promise<boolean>\n onRegister?: (user: User, authClient: AuthenticationClient) => void\n onRegisterError?: (user: User, authClient: AuthenticationClient) => void\n onPwdEmailSend?: (authClient: AuthenticationClient) => void\n onPwdEmailSendError?: (\n error: CommonMessage,\n authClient: AuthenticationClient\n ) => void\n onPwdPhoneSend?: (authClient: AuthenticationClient) => void\n onPwdPhoneSendError?: (\n error: CommonMessage,\n authClient: AuthenticationClient\n ) => void\n onPwdReset?: (authClient: AuthenticationClient) => void\n onPwdResetError?: (\n error: CommonMessage,\n authClient: AuthenticationClient\n ) => void\n onClose?: () => void\n onLoginTabChange?: (activeTab: LoginMethods) => void\n onRegisterTabChange?: (activeTab: RegisterMethods) => void\n onRegisterInfoCompleted?: (\n user: User,\n udfs: {\n definition: any\n value: any\n }[],\n authClient: AuthenticationClient\n ) => void\n onRegisterInfoCompletedError?: (\n error: CommonMessage,\n udfs: {\n definition: any\n value: any\n }[],\n authClient: AuthenticationClient\n ) => void\n}\n\nexport interface UserConfig {\n logo?: string\n title?: string\n zIndex?: number\n isSSO?: boolean\n mode?: GuardMode\n /**\n * @deprecated 使用 appHost\n */\n apiHost?: string\n /**\n * @deprecated 使用 appHost\n */\n appDomain?: string\n appHost?: string\n contentCss?: string\n text?: {\n loginBtn?: {\n normal?: string\n loading?: string\n }\n registerBtn?: {\n normal?: string\n loading?: string\n }\n // 登录 tab\n loginTabs?: Partial<Record<LoginMethods, string>>\n }\n escCloseable?: boolean\n autoRegister?: boolean\n clickCloseable?: boolean\n disableResetPwd?: boolean\n disableRegister?: boolean\n defaultScenes?: GuardScenes\n loginMethods?: LoginMethods[]\n target?: string | HTMLElement\n enterpriseConnections?: string[]\n defaultLoginMethod?: LoginMethods\n registerMethods?: RegisterMethods[]\n socialConnections?: (SocialConnections | SocialConnectionProvider)[]\n defaultRegisterMethod?: RegisterMethods\n qrCodeScanOptions?: Parameters<QrCodeAuthenticationClient['startScanning']>[1]\n /**\n * 国际化处理\n */\n localesConfig?: LocalesConfig\n lang?: Lang\n /**\n * 用于去品牌化\n */\n headers?: AuthenticationClientOptions['headers']\n passwordLoginMethods?: PasswordLoginMethods[]\n}\n\nexport interface GuardConfig extends UserConfig {\n socialConnectionObjs: SocialConnectionItem[]\n enterpriseConnectionObjs: EnterpriseConnectionItem[]\n extendsFields: ApplicationConfig['extendsFields']\n publicKey: ApplicationConfig['publicKey']\n agreementEnabled: boolean\n agreements: Agreement[]\n}\n\nexport interface LocalesConfig {\n defaultLang?: Lang\n isShowChange?: boolean\n onChange?: (lang: Lang) => void\n}\n","import i18n from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport LanguageDetector from 'i18next-browser-languagedetector'\n\nimport * as enUsTrans from './en'\nimport * as zhCnTrans from './zh'\nimport { LocalesConfig, Lang } from '../../AuthingGuard/types'\n\nlet langChangeFN: (lang: Lang) => void = () => {}\n\nexport const changeLang = (lang: Lang) => {\n i18n.changeLanguage(lang)\n langChangeFN && langChangeFN(lang)\n}\n\nconst initI18n = (localesConfig: LocalesConfig = {}, lang?: Lang) => {\n if (!i18n.language) {\n i18n\n .use(LanguageDetector) // 监测当前浏览器语言\n .use(initReactI18next) // 初始化 i18n\n .init({\n detection: {\n order: [],\n },\n resources: {\n 'en-US': {\n translation: enUsTrans,\n },\n 'zh-CN': {\n translation: zhCnTrans,\n },\n },\n fallbackLng: localesConfig.defaultLang || lang || 'zh-CN',\n debug: false,\n interpolation: {\n escapeValue: false, // react already safes from xss\n },\n })\n if (localesConfig.onChange) {\n langChangeFN = localesConfig.onChange\n }\n }\n}\n\nexport { i18n, initI18n }\n","import { LoginMethods, RegisterMethods } from './GuardConfig'\nimport { GuardScenes } from './GuardConfig'\n\nexport interface ActiveTabs {\n [GuardScenes.Login]: LoginMethods\n [GuardScenes.Register]: RegisterMethods\n}\n","import {\n AuthenticationClient,\n AuthenticationClientOptions,\n} from 'authing-js-sdk'\nimport { defaultGuardConfig } from '../constants'\n\nlet authClient: AuthenticationClient | null = null\n\nexport interface AuthClientConfig extends AuthenticationClientOptions {\n /**\n * @deprecated 使用 appHost\n */\n appDomain?: string\n /**\n * @deprecated 无需传入\n */\n isSSO?: boolean\n /**\n * @deprecated 使用 appHost\n */\n host?: string\n}\n\nexport const initAuthClient = (config: AuthClientConfig) => {\n if (authClient) {\n return authClient\n }\n\n const { appHost, appDomain, host } = config\n\n /**\n * 兼容之前的参数\n */\n let realHost\n if (appHost) {\n realHost = appHost\n } else if (appDomain) {\n const parsedUrl = new URL(host || defaultGuardConfig.appHost!)\n realHost = `${parsedUrl.protocol}//${appDomain}${\n parsedUrl.port ? ':' + parsedUrl.port : ''\n }`\n } else if (host) {\n realHost = host\n } else {\n realHost = defaultGuardConfig.appHost\n }\n config.appHost = realHost!\n\n authClient = new AuthenticationClient(config)\n\n return authClient\n}\n\nexport const useAuthing = (config?: AuthClientConfig) => {\n return { authClient: getAuthClient(config) }\n}\n\nexport const getAuthClient = (config?: AuthClientConfig) => {\n if (!authClient && !config) {\n throw new Error(\n 'Please `initAuthClient` first or pass `AuthClientConfig` to useAuthing.'\n )\n }\n\n if (config) {\n initAuthClient(config)\n }\n\n return authClient\n}\n","import { getDefaultG2Config, IG2Config, IG2Events, IG2FCProps } from '../Type'\nimport { AuthenticationClient, User } from '..'\nimport { GuardMFAInitData } from '../MFA/props'\n\nexport interface BindTotpConfig extends IG2Config {}\n\nconst defaultConfig: BindTotpConfig = {\n ...getDefaultG2Config(),\n}\n\nexport const getDefaultMFAConfig = (): BindTotpConfig => ({\n ...getDefaultG2Config(),\n ...defaultConfig,\n})\n\nexport interface BindTotpEvents extends IG2Events {\n onLogin?: (user: User, authClient: AuthenticationClient) => void\n}\n\nexport interface GuardBindTotpInitData extends GuardMFAInitData {}\n\nexport interface GuardBindTotpProps extends IG2FCProps, BindTotpEvents {\n config: Partial<BindTotpConfig>\n initData: GuardBindTotpInitData\n}\n\nexport interface GuardBindTotpViewProps extends GuardBindTotpProps {\n config: BindTotpConfig\n initData: GuardBindTotpInitData\n}\n","import { AuthenticationClient, CommonMessage, User } from 'authing-js-sdk'\nimport { getDefaultG2Config, IG2Config, IG2Events, IG2FCProps } from '../Type'\n\nexport interface CompleteInfoConfig extends IG2Config {}\n\nconst defaultConfig: CompleteInfoConfig = {\n ...getDefaultG2Config(),\n}\n\nexport const getDefaultLoginConfig = (): CompleteInfoConfig => ({\n ...getDefaultG2Config(),\n ...defaultConfig,\n})\n\nexport interface CompleteInfoEvents extends IG2Events {\n onRegisterInfoCompleted?: (\n user: User,\n udfs: {\n definition: any\n value: any\n }[],\n authClient: AuthenticationClient\n ) => void\n onRegisterInfoCompletedError?: (\n error: CommonMessage,\n udfs: {\n definition: any\n value: any\n }[],\n authClient: AuthenticationClient\n ) => void\n}\n\nexport interface GuardCompleteInfoProps extends IG2FCProps, CompleteInfoEvents {\n config: Partial<CompleteInfoConfig>\n}\n\nexport interface GuardCompleteInfoViewProps extends GuardCompleteInfoProps {\n config: CompleteInfoConfig\n}\n","import { getDefaultG2Config, IG2Config, IG2Events, IG2FCProps } from '../Type'\n\nexport interface DownloadATConfig extends IG2Config {}\n\nconst defaultConfig: DownloadATConfig = {\n ...getDefaultG2Config(),\n}\n\nexport const getDefaultDownloadAuthenticatorConfig = (): DownloadATConfig => ({\n ...getDefaultG2Config(),\n ...defaultConfig,\n})\n\nexport interface DownloadATEvents extends IG2Events {}\n\nexport interface GuardDownloadATProps extends IG2FCProps, DownloadATEvents {\n config: Partial<DownloadATConfig>\n}\n\nexport interface GuardDownloadATViewProps extends GuardDownloadATProps {\n config: DownloadATConfig\n}\n","export * from './Forms'\nexport * from './GuardState'\nexport * from './GuardConfig'\nexport * from './Locales'\n","import qs from 'qs'\nimport { i18n } from './locales'\n\nexport const requestClient = async (...rest: Parameters<typeof fetch>) => {\n const res = await fetch(...rest)\n return res.json()\n}\n\nexport interface AuthingResponse<T = any> {\n code: number\n message?: string\n data?: T\n}\n\nrequestClient.get = async <T>(\n path: string,\n query: Record<string, any> = {},\n init?: RequestInit\n): Promise<AuthingResponse<T>> => {\n const res = await fetch(\n `${requestClient.baseUrl}${path}${qs.stringify(query, {\n addQueryPrefix: true,\n })}`,\n {\n ...init,\n credentials: 'include',\n headers: {\n ...init?.headers,\n [requestClient.langHeader]: i18n.language,\n },\n }\n )\n\n return res.json()\n}\n\nrequestClient.post = async <T>(\n path: string,\n data: any,\n config?: {\n headers: any\n }\n): Promise<AuthingResponse<T>> => {\n const res = await fetch(`${requestClient.baseUrl}${path}`, {\n method: 'POST',\n body: JSON.stringify(data),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n ...config?.headers,\n [requestClient.langHeader]: i18n.language,\n },\n })\n return res.json()\n}\n\nrequestClient.postForm = async <T>(\n path: string,\n formData: any,\n config?: {\n headers: any\n }\n): Promise<AuthingResponse<T>> => {\n const res = await fetch(`${requestClient.baseUrl}${path}`, {\n method: 'post',\n body: formData,\n credentials: 'include',\n headers: {\n ...config?.headers,\n [requestClient.langHeader]: i18n.language,\n },\n })\n return res.json()\n}\n\nrequestClient.baseUrl = ''\nrequestClient.setBaseUrl = (base: string) => {\n requestClient.baseUrl = base.replace(/\\/$/, '')\n}\n\nconst DEFAULT_LANG_HEADER = 'x-authing-lang'\nrequestClient.langHeader = DEFAULT_LANG_HEADER\nrequestClient.setLangHeader = (key: string | undefined) => {\n requestClient.langHeader = key || DEFAULT_LANG_HEADER\n}\n","import packageConfig from '../../package.json'\nimport { requestClient } from './http'\n\nlet httpClient: GuardHttp\n\nexport class GuardHttp {\n private requestClient: any\n private headers: Record<string, string> = {\n 'x-authing-userpool-id': '',\n 'x-authing-app-id': '',\n 'x-authing-sdk-version': packageConfig.version,\n 'x-authing-request-from': `Guard-${packageConfig.framework}@${packageConfig.version}`,\n }\n\n constructor(baseUrl: string) {\n this.getRequestClient().setBaseUrl(baseUrl)\n }\n\n private getRequestClient() {\n if (!this.requestClient) {\n this.requestClient = requestClient\n }\n\n return this.requestClient\n }\n\n setUserpoolId(userpoolId: string) {\n this.headers['x-authing-userpool-id'] = userpoolId\n }\n\n setAppId(appId: string) {\n this.headers['x-authing-app-id'] = appId\n }\n\n setTenantId(tenantId: string) {\n this.headers['x-authing-app-tenant-id'] = tenantId\n }\n\n public getHeaders = () => this.headers\n\n public get = async <T>(\n path: string,\n query: Record<string, any> = {},\n config?: RequestInit\n ) =>\n await requestClient.get<T>(path, query, {\n ...config,\n headers: { ...this.headers, ...config?.headers },\n })\n\n public post = async <T>(\n path: string,\n data: any,\n config?: {\n headers: any\n }\n ) =>\n await requestClient.post<T>(path, data, {\n headers: {\n ...this.headers,\n ...config?.headers,\n },\n })\n\n public postForm = async <T>(\n path: string,\n formData: any,\n config?: {\n headers: any\n }\n ) =>\n await requestClient.postForm<T>(path, formData, {\n headers: {\n ...this.headers,\n ...config?.headers,\n },\n })\n}\n\nexport const initGuardHttp = (baseUrl: string) => {\n if (!httpClient) {\n const guardHttp = new GuardHttp(baseUrl)\n httpClient = guardHttp\n }\n\n return httpClient\n}\n\nexport const getGuardHttp = () => {\n if (!httpClient) {\n throw new Error('Please initialize Http Client')\n }\n\n return httpClient\n}\n\nexport const useGuardHttp = () => getGuardHttp()\n","import { AuthenticationClient, CommonMessage } from 'authing-js-sdk'\nimport { Lang } from 'authing-js-sdk/build/main/types'\nimport { GuardMode } from '..'\nimport { ApplicationConfig } from '../AuthingGuard/api'\nimport { GuardModuleType } from '../Guard/module'\nexport interface IG2FCProps extends IG2Events {\n appId: string\n config?: Partial<IG2Config>\n}\n\nexport interface IG2FCViewProps extends IG2FCProps {\n config: IG2Config\n}\n\nexport interface IG2Config {\n title: string\n logo: string\n lang: Lang\n langRange: Lang[]\n host: string\n mode: GuardMode\n clickCloseable: boolean\n escCloseable: boolean\n userpool?: string\n contentCss?: string\n target?: HTMLElement | string\n __appHost__?: string\n __publicConfig__?: ApplicationConfig\n}\n\nconst defaultG2Config: IG2Config = {\n lang: 'zh-CN',\n langRange: ['zh-CN', 'en-US'],\n title: 'Authing',\n escCloseable: true,\n clickCloseable: true,\n mode: GuardMode.Normal,\n host: 'https://core.authing.cn',\n logo:\n 'https://files.authing.co/user-contents/photos/0a4c99ff-b8ce-4030-aaaf-584c807cb21c.png',\n}\n\nexport interface IG2Events {\n onLoad?: (authClient: AuthenticationClient) => void\n onLoadError?: (error: CommonMessage) => void\n onClose?: () => void\n onLangChange?: (lang: Lang) => void\n // __codePaser?: (code: number) => Function\n __changeModule?: (moduleName: GuardModuleType, initData?: any) => void\n}\n\nexport const getDefaultG2Config = (): IG2Config => defaultG2Config\n","export * from './AuthingGuard/types'\nexport * from './AuthingGuard/hooks'\nexport type { AuthenticationClientOptions } from 'authing-js-sdk'\n\nexport * from './Guard'\nexport * from './Type'\nexport * from './BindTotp/interface'\nexport * from './CompleteInfo/interface'\nexport * from './DownloadAuthenticator/interface'\nexport * from './Error/interface'\nexport * from './ForgetPassword/interface'\nexport * from './_utils/config'\n","export default \"data:image/png;base64,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\"","import { ReportHandler } from 'web-vitals'\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry)\n getFID(onPerfEntry)\n getFCP(onPerfEntry)\n getLCP(onPerfEntry)\n getTTFB(onPerfEntry)\n })\n }\n}\n\nexport default reportWebVitals\n","import React from 'react'\nimport ReactDOM from 'react-dom'\n\nimport reportWebVitals from './reportWebVitals'\nimport { message } from 'antd'\nimport { Guard } from './components/Guard'\n\nconst App = () => {\n return (\n <div\n style={{\n display: 'flex',\n width: '100vw',\n justifyContent: 'center',\n }}\n >\n <Guard\n appId=\"618e093c3a9138c729fe7d0b\"\n // appId=\"6191cf610f772aa56dc70637\"\n // tenantId=\"6194a41abf23c1d5268b362a\"\n onLogin={(u) => {\n message.info('🏁 用户业务层终点,登录完成。')\n console.log(u)\n }}\n onLoad={(authClint) => console.log('🪝 onLoad', authClint)}\n onLoadError={(error) => console.log('🪝 onLoadError', error)}\n onBeforeLogin={(m) => {\n console.log('🪝onBeforeLogin 触发,返回 promise 或布尔', m)\n return new Promise((resolve) => {\n resolve(true)\n })\n }}\n onRegister={(user, authClint) => {\n console.log('🪝 onRegister 触发', user, authClint)\n }}\n onRegisterError={(e) => console.log('🪝 onRegisterError 触发', e)}\n onLoginError={() => {\n console.log('❌ onLoginError 触发')\n }}\n onLoginTabChange={(key) => {\n console.log('📁 onLoginTabChange 触发', key)\n }}\n onRegisterTabChange={(registerMethod) => {\n console.log('📁 onRegisterTabChange 触发', registerMethod)\n }}\n config={\n {\n // host: 'https://core.dev2.authing-inc.co/',\n // registerMethods: [RegisterMethods.Email],\n // autoRegister: true,\n // defaultRegisterMethod: RegisterMethods.Phone,\n // disableRegister: false,\n // disableResetPwd: false,\n // defaultLoginMethod: LoginMethods.WxMinQr, // 指定默认登录方式,如果这个方式不存在于 LoginMethods,那么就当作没有传入\n // loginMethods: [],\n // LoginMethods.Password,\n // LoginMethods.PhoneCode,\n // LoginMethods.WxMinQr,\n // ],\n // socialConnections: [\n // SocialConnectionProvider.ALIPAY,\n // SocialConnectionProvider.APPLE_WEB,\n // ], // 指定可选的社会化登录方式\n // qrCodeScanOptions?: Parameters<QrCodeAuthenticationClient['startScanning']>[1]\n // passwordLoginMethods?: PasswordLoginMethods[]\n // enterpriseConnections: [] // 这个有啥用?\n // publicKey?: string\n // lang: 'en-US',\n // lang: 'zh-CN',\n // mode: GuardMode.Modal,\n // logo: '',\n // clickCloseable: false, // clickCloseable\tModal 模式时是否隐藏登录框右上角的关闭按钮\n // escCloseable: true, //\n // target: '#c1',\n // socialConnectionsBtnShape: 'rectangle',\n }\n }\n />\n </div>\n )\n}\n\nReactDOM.render(<App />, document.getElementById('root'))\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals()\n","import {\n GuardMode,\n UserConfig,\n GuardScenes,\n LoginMethods,\n RegisterMethods,\n LocalesConfig,\n} from '../../components/AuthingGuard/types'\nimport { i18n } from '../_utils/locales'\n\n// 个人版 OTP MFA 的 error code\nexport const OTP_MFA_CODE = 1635\n// 企业版手机和短信验证吗 MFA 的 error code\nexport const APP_MFA_CODE = 1636\n\n// 需要验证吗\nexport const NEED_CAPTCHA = 2000\n\nexport const LOGIN_METHODS_MAP = () => ({\n [LoginMethods.Password]: i18n.t('login.pwdLogin'),\n [LoginMethods.PhoneCode]: i18n.t('login.verifyCodeLogin'),\n [LoginMethods.AppQr]: i18n.t('login.appScanLogin'),\n [LoginMethods.WxMinQr]: i18n.t('login.scanLogin'),\n [LoginMethods.LDAP]: i18n.t('login.ldapLogin'),\n [LoginMethods.AD]: i18n.t('login.adLogin'),\n [LoginMethods.WechatMpQrcode]: i18n.t('login.wechatmpQrcode'),\n})\n\nexport const REGISTER_METHODS_MAP = () => ({\n [RegisterMethods.Email]: i18n.t('login.emailRegister'),\n [RegisterMethods.Phone]: i18n.t('login.phoneRegister'),\n})\n\n// 某些社会化登录会在 tabs 中显示,或者无法在 Guard 中使用,所以底部不显示了\nexport const HIDE_SOCIALS = [\n 'wechat:miniprogram:app-launch',\n 'wechat:miniprogram:qrconnect',\n 'wechat:webpage-authorization',\n 'wechat:miniprogram:default',\n 'wechatwork:addressbook',\n 'wechat:mobile',\n]\n\n// 企业版 MFA 支持的方式\nexport enum ApplicationMfaType {\n SMS = 'SMS',\n EMAIL = 'EMAIL',\n // OTP = 'OTP',\n // FACE = 'FACE',\n // FINGERPRINT = 'FINGERPRINT',\n}\n\nexport const defaultGuardConfig: Partial<UserConfig> = {\n isSSO: false,\n title: 'Authing',\n text: {\n loginTabs: LOGIN_METHODS_MAP(),\n loginBtn: {\n normal: '登录',\n loading: '登录',\n },\n registerBtn: {\n normal: '注册',\n loading: '注册',\n },\n },\n escCloseable: true,\n autoRegister: false,\n clickCloseable: true,\n mode: GuardMode.Normal,\n disableRegister: false,\n disableResetPwd: false,\n defaultScenes: GuardScenes.Login,\n appHost: 'https://core.authing.cn',\n defaultLoginMethod: LoginMethods.Password,\n defaultRegisterMethod: RegisterMethods.Email,\n loginMethods: [LoginMethods.Password, LoginMethods.PhoneCode],\n registerMethods: [RegisterMethods.Email, RegisterMethods.Phone],\n logo:\n 'https://files.authing.co/user-contents/photos/0a4c99ff-b8ce-4030-aaaf-584c807cb21c.png',\n passwordLoginMethods: [\n 'email-password',\n 'username-password',\n 'phone-password',\n ],\n}\n\nexport const defaultLocalesConfig: LocalesConfig = {\n defaultLang: 'zh-CN',\n isShowChange: false,\n}\n\nexport const defaultHeaders: {\n 'userpool-id': string\n 'app-id': string\n 'tenant-id': string\n 'sdk-version': string\n 'request-from': string\n lang: string\n} = {\n 'userpool-id': 'x-authing-userpool-id',\n 'app-id': 'x-authing-app-id',\n 'tenant-id': 'x-authing-app-tenant-id',\n 'request-from': 'x-authing-request-from',\n 'sdk-version': 'x-authing-sdk-version',\n lang: 'x-authing-lang',\n}\n"],"sourceRoot":""}
|