@authing/react-ui-components 3.0.2-beta.1 → 3.0.2-beta.14

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.
Files changed (263) hide show
  1. package/lib/index.d.ts +555 -46
  2. package/lib/index.min.css +2 -2
  3. package/lib/index.min.js +1 -1
  4. package/lib/index.min.js.LICENSE.txt +2 -0
  5. package/package.json +30 -10
  6. package/.eslintignore +0 -6
  7. package/.eslintrc.js +0 -7
  8. package/.prettierrc +0 -5
  9. package/.vscode/settings.json +0 -31
  10. package/build/asset-manifest.json +0 -26
  11. package/build/favicon.ico +0 -0
  12. package/build/index.html +0 -1
  13. package/build/logo192.png +0 -0
  14. package/build/logo512.png +0 -0
  15. package/build/manifest.json +0 -25
  16. package/build/robots.txt +0 -3
  17. package/build/static/css/2.9512539b.chunk.css +0 -3
  18. package/build/static/css/2.9512539b.chunk.css.map +0 -1
  19. package/build/static/css/main.0ff9e24a.chunk.css +0 -2
  20. package/build/static/css/main.0ff9e24a.chunk.css.map +0 -1
  21. package/build/static/js/2.1105ecfb.chunk.js +0 -3
  22. package/build/static/js/2.1105ecfb.chunk.js.LICENSE.txt +0 -102
  23. package/build/static/js/2.1105ecfb.chunk.js.map +0 -1
  24. package/build/static/js/3.fd17f196.chunk.js +0 -2
  25. package/build/static/js/3.fd17f196.chunk.js.map +0 -1
  26. package/build/static/js/main.a47645ff.chunk.js +0 -2
  27. package/build/static/js/main.a47645ff.chunk.js.map +0 -1
  28. package/build/static/js/runtime-main.ef138021.js +0 -2
  29. package/build/static/js/runtime-main.ef138021.js.map +0 -1
  30. package/build/static/media/loading.4a67a5f3.svg +0 -29
  31. package/components/AuthingDropdown/index.tsx +0 -52
  32. package/components/AuthingDropdown/style.less +0 -43
  33. package/components/AuthingGuard/AppMFALayout/index.tsx +0 -74
  34. package/components/AuthingGuard/AppMFALayout/style.less +0 -12
  35. package/components/AuthingGuard/CompleteUserInfoLayout/index.tsx +0 -29
  36. package/components/AuthingGuard/CompleteUserInfoLayout/style.less +0 -8
  37. package/components/AuthingGuard/Forms/ADLoginForm/index.tsx +0 -117
  38. package/components/AuthingGuard/Forms/Agreements/index.tsx +0 -81
  39. package/components/AuthingGuard/Forms/Agreements/style.less +0 -44
  40. package/components/AuthingGuard/Forms/CompleteUserInfoForm/index.tsx +0 -139
  41. package/components/AuthingGuard/Forms/EmailMfaVerifyForm/CheckEmailForm.tsx +0 -84
  42. package/components/AuthingGuard/Forms/EmailMfaVerifyForm/VerifyCodeForm.tsx +0 -116
  43. package/components/AuthingGuard/Forms/EmailMfaVerifyForm/index.tsx +0 -40
  44. package/components/AuthingGuard/Forms/EmailMfaVerifyForm/style.less +0 -0
  45. package/components/AuthingGuard/Forms/EmailRegisterForm/index.tsx +0 -181
  46. package/components/AuthingGuard/Forms/EmailRegisterForm/style.less +0 -0
  47. package/components/AuthingGuard/Forms/LdapLoginForm/index.tsx +0 -166
  48. package/components/AuthingGuard/Forms/LdapLoginForm/style.less +0 -0
  49. package/components/AuthingGuard/Forms/LoginFormFooter/index.tsx +0 -76
  50. package/components/AuthingGuard/Forms/LoginFormFooter/style.less +0 -6
  51. package/components/AuthingGuard/Forms/MfaResetCodeForm/Step1.tsx +0 -86
  52. package/components/AuthingGuard/Forms/MfaResetCodeForm/Step2.tsx +0 -53
  53. package/components/AuthingGuard/Forms/MfaResetCodeForm/index.tsx +0 -65
  54. package/components/AuthingGuard/Forms/MfaResetCodeForm/style.less +0 -20
  55. package/components/AuthingGuard/Forms/MfaVerifyForm/index.tsx +0 -105
  56. package/components/AuthingGuard/Forms/MfaVerifyForm/style.less +0 -12
  57. package/components/AuthingGuard/Forms/PasswordLoginForm/index.tsx +0 -261
  58. package/components/AuthingGuard/Forms/PhoneCodeLoginForm/index.tsx +0 -133
  59. package/components/AuthingGuard/Forms/PhoneRegisterForm/index.tsx +0 -202
  60. package/components/AuthingGuard/Forms/QrCodeLoginForm/index.tsx +0 -59
  61. package/components/AuthingGuard/Forms/QrCodeLoginForm/style.less +0 -14
  62. package/components/AuthingGuard/Forms/RegisterFormFooter/index.tsx +0 -56
  63. package/components/AuthingGuard/Forms/RegisterFormFooter/style.less +0 -0
  64. package/components/AuthingGuard/Forms/ResetPwdForm/Footer.tsx +0 -21
  65. package/components/AuthingGuard/Forms/ResetPwdForm/Step1.tsx +0 -86
  66. package/components/AuthingGuard/Forms/ResetPwdForm/Step2.tsx +0 -127
  67. package/components/AuthingGuard/Forms/ResetPwdForm/Step3.tsx +0 -141
  68. package/components/AuthingGuard/Forms/ResetPwdForm/Step4.tsx +0 -51
  69. package/components/AuthingGuard/Forms/ResetPwdForm/index.tsx +0 -96
  70. package/components/AuthingGuard/Forms/ResetPwdForm/style.less +0 -3
  71. package/components/AuthingGuard/Forms/SendPhoneCode/SendCodeBtn.tsx +0 -88
  72. package/components/AuthingGuard/Forms/SendPhoneCode/index.tsx +0 -50
  73. package/components/AuthingGuard/Forms/SendPhoneCode/style.less +0 -26
  74. package/components/AuthingGuard/Forms/SmsMfaVerifyForm/CheckPhoneForm.tsx +0 -86
  75. package/components/AuthingGuard/Forms/SmsMfaVerifyForm/VerifyCodeForm.tsx +0 -113
  76. package/components/AuthingGuard/Forms/SmsMfaVerifyForm/index.tsx +0 -40
  77. package/components/AuthingGuard/Forms/SmsMfaVerifyForm/style.less +0 -3
  78. package/components/AuthingGuard/Forms/SocialAndIdpLogin/index.tsx +0 -325
  79. package/components/AuthingGuard/Forms/SocialAndIdpLogin/style.less +0 -75
  80. package/components/AuthingGuard/Forms/UploadImage/index.tsx +0 -70
  81. package/components/AuthingGuard/Forms/index.ts +0 -13
  82. package/components/AuthingGuard/GuardLayout/index.tsx +0 -474
  83. package/components/AuthingGuard/GuardLayout/style.less +0 -111
  84. package/components/AuthingGuard/Header/index.tsx +0 -25
  85. package/components/AuthingGuard/Header/style.less +0 -52
  86. package/components/AuthingGuard/IconFont/iconfont.js +0 -74
  87. package/components/AuthingGuard/IconFont/index.tsx +0 -19
  88. package/components/AuthingGuard/IconFont/style.less +0 -6
  89. package/components/AuthingGuard/IconFont/svg.js +0 -2
  90. package/components/AuthingGuard/LoginLayout/index.tsx +0 -161
  91. package/components/AuthingGuard/LoginLayout/style.less +0 -0
  92. package/components/AuthingGuard/MfaLayout/Steps.ts +0 -4
  93. package/components/AuthingGuard/MfaLayout/index.tsx +0 -49
  94. package/components/AuthingGuard/MfaLayout/style.less +0 -3
  95. package/components/AuthingGuard/RegisterLayout/index.tsx +0 -89
  96. package/components/AuthingGuard/RegisterLayout/style.less +0 -0
  97. package/components/AuthingGuard/ResetPwdLayout/index.tsx +0 -20
  98. package/components/AuthingGuard/ToggleLang/index.tsx +0 -51
  99. package/components/AuthingGuard/api/appConfig.ts +0 -146
  100. package/components/AuthingGuard/api/index.ts +0 -3
  101. package/components/AuthingGuard/api/sso.ts +0 -29
  102. package/components/AuthingGuard/api/userPoolConfig.ts +0 -111
  103. package/components/AuthingGuard/constants.ts +0 -107
  104. package/components/AuthingGuard/hooks/index.tsx +0 -70
  105. package/components/AuthingGuard/hooks/useScreenSize.tsx +0 -68
  106. package/components/AuthingGuard/index.tsx +0 -126
  107. package/components/AuthingGuard/style.less +0 -103
  108. package/components/AuthingGuard/types/Forms.ts +0 -94
  109. package/components/AuthingGuard/types/GuardConfig.ts +0 -420
  110. package/components/AuthingGuard/types/GuardState.ts +0 -7
  111. package/components/AuthingGuard/types/Locales.ts +0 -12
  112. package/components/AuthingGuard/types/index.ts +0 -4
  113. package/components/AuthingTabs/index.tsx +0 -98
  114. package/components/AuthingTabs/style.less +0 -135
  115. package/components/BindTotp/core/bindSuccess.tsx +0 -73
  116. package/components/BindTotp/core/securityCode.tsx +0 -108
  117. package/components/BindTotp/index.tsx +0 -134
  118. package/components/BindTotp/interface.ts +0 -30
  119. package/components/BindTotp/styles.less +0 -57
  120. package/components/ChangeLanguage/index.tsx +0 -35
  121. package/components/ChangePassword/core/firstLoginReset.tsx +0 -104
  122. package/components/ChangePassword/core/rotateReset.tsx +0 -114
  123. package/components/ChangePassword/index.tsx +0 -59
  124. package/components/CompleteInfo/core/completeInfo.tsx +0 -155
  125. package/components/CompleteInfo/index.tsx +0 -45
  126. package/components/CompleteInfo/interface.ts +0 -40
  127. package/components/CompleteInfo/styles.less +0 -7
  128. package/components/CopyAbleText/index.tsx +0 -54
  129. package/components/CopyAbleText/style.less +0 -13
  130. package/components/DownloadAuthenticator/index.tsx +0 -97
  131. package/components/DownloadAuthenticator/interface.ts +0 -22
  132. package/components/DownloadAuthenticator/styles.less +0 -52
  133. package/components/Error/index.tsx +0 -21
  134. package/components/Error/interface.ts +0 -9
  135. package/components/Error/styles.less +0 -12
  136. package/components/ForgetPassword/core/resetPassword.tsx +0 -162
  137. package/components/ForgetPassword/index.tsx +0 -78
  138. package/components/ForgetPassword/interface.ts +0 -32
  139. package/components/Guard/Guard.tsx +0 -255
  140. package/components/Guard/authClient.ts +0 -46
  141. package/components/Guard/config.ts +0 -19
  142. package/components/Guard/event.ts +0 -52
  143. package/components/Guard/index.tsx +0 -4
  144. package/components/Guard/module.ts +0 -20
  145. package/components/Guard/stateMachine.ts +0 -133
  146. package/components/Guard/styles.less +0 -461
  147. package/components/IconFont/iconfont.js +0 -74
  148. package/components/IconFont/index.tsx +0 -16
  149. package/components/IconFont/style.less +0 -6
  150. package/components/IconFont/svg.js +0 -2
  151. package/components/ImagePro/index.tsx +0 -53
  152. package/components/ImagePro/styles.less +0 -40
  153. package/components/InputNumber/index.tsx +0 -33
  154. package/components/Login/codemap.ts +0 -47
  155. package/components/Login/core/withAD.tsx +0 -9
  156. package/components/Login/core/withAppQrcode.tsx +0 -49
  157. package/components/Login/core/withLDAP.tsx +0 -146
  158. package/components/Login/core/withPassword/FormItemAccount.tsx +0 -42
  159. package/components/Login/core/withPassword/GraphicVerifyCode.tsx +0 -31
  160. package/components/Login/core/withPassword/InputAccount.tsx +0 -64
  161. package/components/Login/core/withPassword/index.tsx +0 -173
  162. package/components/Login/core/withPhonecode.tsx +0 -122
  163. package/components/Login/core/withWechatMiniQrcode.tsx +0 -60
  164. package/components/Login/core/withWechatmpQrcode.tsx +0 -53
  165. package/components/Login/index.tsx +0 -373
  166. package/components/Login/props.ts +0 -74
  167. package/components/Login/socialLogin/index.tsx +0 -407
  168. package/components/Login/socialLogin/style.less +0 -69
  169. package/components/Login/styles.less +0 -53
  170. package/components/MFA/VerifyCodeInput/VerifyCodeFormItem.tsx +0 -41
  171. package/components/MFA/VerifyCodeInput/index.tsx +0 -145
  172. package/components/MFA/VerifyCodeInput/style.less +0 -35
  173. package/components/MFA/codemap.ts +0 -24
  174. package/components/MFA/core/email.tsx +0 -203
  175. package/components/MFA/core/face.tsx +0 -297
  176. package/components/MFA/core/face_deps.tsx +0 -37
  177. package/components/MFA/core/sms.tsx +0 -204
  178. package/components/MFA/core/totp.tsx +0 -122
  179. package/components/MFA/index.tsx +0 -143
  180. package/components/MFA/mfaMethods/index.tsx +0 -88
  181. package/components/MFA/mfaMethods/style.less +0 -39
  182. package/components/MFA/props.ts +0 -51
  183. package/components/MFA/styles.less +0 -100
  184. package/components/NeedHelpView/core/describeQuestions.tsx +0 -245
  185. package/components/NeedHelpView/index.tsx +0 -47
  186. package/components/RecoveryCode/core/useCode.tsx +0 -71
  187. package/components/RecoveryCode/index.tsx +0 -27
  188. package/components/RecoveryCode/interface.ts +0 -31
  189. package/components/RecoveryCode/style.less +0 -13
  190. package/components/Register/codemap.ts +0 -12
  191. package/components/Register/components/Agreements/index.tsx +0 -81
  192. package/components/Register/components/Agreements/style.less +0 -44
  193. package/components/Register/core/WithEmail.tsx +0 -239
  194. package/components/Register/core/WithPhone.tsx +0 -184
  195. package/components/Register/index.tsx +0 -138
  196. package/components/Register/props.ts +0 -50
  197. package/components/SendCode/SendCodeBtn.tsx +0 -96
  198. package/components/SendCode/index.tsx +0 -94
  199. package/components/SendCode/style.less +0 -31
  200. package/components/ShieldSpin/index.tsx +0 -27
  201. package/components/ShieldSpin/loading.svg +0 -29
  202. package/components/SubmitButton/index.tsx +0 -50
  203. package/components/SubmitSuccess/index.tsx +0 -66
  204. package/components/SubmitSuccess/interface.ts +0 -17
  205. package/components/Type/index.ts +0 -52
  206. package/components/ValidatorRules/EmailFormItem.tsx +0 -95
  207. package/components/ValidatorRules/PhoneFormItem.tsx +0 -100
  208. package/components/ValidatorRules/index.ts +0 -14
  209. package/components/VerifyCodeInput/index.tsx +0 -76
  210. package/components/VerifyCodeInput/style.less +0 -24
  211. package/components/_utils/GuardErrorCode.ts +0 -9
  212. package/components/_utils/clipboard.ts +0 -27
  213. package/components/_utils/config.ts +0 -118
  214. package/components/_utils/guradHttp.ts +0 -97
  215. package/components/_utils/hooks/index.ts +0 -64
  216. package/components/_utils/http.ts +0 -85
  217. package/components/_utils/index.ts +0 -322
  218. package/components/_utils/locales/en/common.json +0 -227
  219. package/components/_utils/locales/en/index.ts +0 -6
  220. package/components/_utils/locales/en/login.json +0 -96
  221. package/components/_utils/locales/en/map.json +0 -4
  222. package/components/_utils/locales/en/user.json +0 -82
  223. package/components/_utils/locales/index.ts +0 -45
  224. package/components/_utils/locales/zh/common.json +0 -227
  225. package/components/_utils/locales/zh/index.ts +0 -6
  226. package/components/_utils/locales/zh/login.json +0 -96
  227. package/components/_utils/locales/zh/map.json +0 -4
  228. package/components/_utils/locales/zh/user.json +0 -82
  229. package/components/_utils/popupCenter.ts +0 -48
  230. package/components/assets/images/error.png +0 -0
  231. package/components/context/base.tsx +0 -28
  232. package/components/context/global/context.tsx +0 -39
  233. package/components/context/global/reducer.tsx +0 -56
  234. package/components/context/module/context.tsx +0 -23
  235. package/components/index.ts +0 -12
  236. package/config/antdReplacer.js +0 -51
  237. package/config/env.js +0 -104
  238. package/config/getHttpsConfig.js +0 -66
  239. package/config/jest/cssTransform.js +0 -14
  240. package/config/jest/fileTransform.js +0 -40
  241. package/config/modules.js +0 -134
  242. package/config/paths.js +0 -71
  243. package/config/pnpTs.js +0 -35
  244. package/config/webpack.config.js +0 -835
  245. package/config/webpackDevServer.config.js +0 -130
  246. package/examples.tsx +0 -82
  247. package/index.js +0 -1
  248. package/logo.svg +0 -7
  249. package/public/favicon.ico +0 -0
  250. package/public/index.html +0 -43
  251. package/public/logo192.png +0 -0
  252. package/public/logo512.png +0 -0
  253. package/public/manifest.json +0 -25
  254. package/public/robots.txt +0 -3
  255. package/react-app-env.d.ts +0 -71
  256. package/reportWebVitals.ts +0 -15
  257. package/scripts/build.js +0 -208
  258. package/scripts/lib.js +0 -200
  259. package/scripts/publish.js +0 -57
  260. package/scripts/start.js +0 -162
  261. package/scripts/test.js +0 -49
  262. package/setupTests.ts +0 -5
  263. package/tsconfig.json +0 -30
@@ -1,146 +0,0 @@
1
- import React, { useRef, useState } from 'react'
2
- import { useTranslation } from 'react-i18next'
3
- import { LockOutlined, UserOutlined } from '@ant-design/icons'
4
- import { Form, Input } from 'antd'
5
- import { LoginMethods } from '../../'
6
- import { ErrorCode } from '../../_utils/GuardErrorCode'
7
- import { useAuthClient } from '../../Guard/authClient'
8
- import SubmitButton from '../../SubmitButton'
9
- import { fieldRequiredRule } from '../../_utils'
10
-
11
- interface LoginWithLDAPProps {
12
- // configs
13
- publicKey: string
14
- autoRegister?: boolean
15
- host?: string
16
-
17
- // events
18
- onLogin: any
19
- onBeforeLogin: any
20
- }
21
-
22
- export const LoginWithLDAP = (props: LoginWithLDAPProps) => {
23
- let client = useAuthClient()
24
- const { t } = useTranslation()
25
- let submitButtonRef = useRef<any>(null)
26
-
27
- const [showCaptcha, setShowCaptcha] = useState(false)
28
- const [verifyCodeUrl, setVerifyCodeUrl] = useState('')
29
- const captchaUrl = `${props.host}/api/v2/security/captcha`
30
- const getCaptchaUrl = () => `${captchaUrl}?r=${+new Date()}`
31
-
32
- const onFinish = async (values: any) => {
33
- // onBeforeLogin
34
- submitButtonRef.current.onSpin(true)
35
- let loginInfo = {
36
- type: LoginMethods.LDAP,
37
- data: {
38
- identity: values.account,
39
- password: values.password,
40
- captchaCode: values.captchaCode,
41
- },
42
- }
43
- let context = await props.onBeforeLogin(loginInfo)
44
- if (!context) {
45
- submitButtonRef.current.onSpin(false)
46
- return
47
- }
48
-
49
- // onLogin
50
- let account = values.account && values.account.trim()
51
- let password = values.password && values.password.trim()
52
- let captchaCode = values.captchaCode && values.captchaCode.trim()
53
- try {
54
- const user = await client.loginByLdap(account, password, {
55
- autoRegister: props.autoRegister,
56
- captchaCode,
57
- })
58
- props.onLogin(200, user)
59
- } catch (error: any) {
60
- if (typeof error?.message === 'string') {
61
- let e = { code: 2333, data: {}, message: t('common.timeoutLDAP') }
62
- try {
63
- e = JSON.parse(error?.message)
64
- console.log('paser error.message error,cheke error', error)
65
- // onFail && onFail(errorData)
66
- submitButtonRef.current.onSpin(false)
67
- return
68
- } catch {}
69
- if (e.code === ErrorCode.INPUT_CAPTCHACODE) {
70
- setVerifyCodeUrl(getCaptchaUrl())
71
- setShowCaptcha(true)
72
- }
73
- submitButtonRef.current.onSpin(false)
74
- props.onLogin(e.code, e.data, e.message)
75
- // onFail && onFail(error)
76
- }
77
- }
78
- }
79
-
80
- return (
81
- <div className="authing-g2-login-ldap">
82
- <Form
83
- name="passworLogin"
84
- onFinish={onFinish}
85
- onFinishFailed={() => submitButtonRef.current.onError()}
86
- autoComplete="off"
87
- >
88
- <Form.Item
89
- className="authing-g2-input-form"
90
- name="account"
91
- rules={fieldRequiredRule(t('common.account'))}
92
- >
93
- <Input
94
- className="authing-g2-input"
95
- autoComplete="email,username,tel"
96
- size="large"
97
- placeholder={t('login.inputLdapUsername')}
98
- prefix={<UserOutlined style={{ color: '#878A95' }} />}
99
- />
100
- </Form.Item>
101
- <Form.Item
102
- className="authing-g2-input-form"
103
- name="password"
104
- rules={fieldRequiredRule(t('common.password'))}
105
- >
106
- <Input.Password
107
- className="authing-g2-input"
108
- size="large"
109
- placeholder={t('login.inputLdapPwd')}
110
- prefix={<LockOutlined style={{ color: '#878A95' }} />}
111
- />
112
- </Form.Item>
113
- {showCaptcha && (
114
- <Form.Item
115
- className="authing-g2-input-form"
116
- name="captchaCode"
117
- rules={[{ required: true, message: t('login.inputCaptchaCode') }]}
118
- >
119
- <Input
120
- className="authing-g2-input add-after"
121
- size="large"
122
- placeholder={t('login.inputCaptchaCode')}
123
- addonAfter={
124
- <img
125
- className="g2-captcha-code-image"
126
- src={verifyCodeUrl}
127
- alt={t('login.captchaCode')}
128
- style={{ height: '2em', cursor: 'pointer' }}
129
- onClick={() => setVerifyCodeUrl(getCaptchaUrl())}
130
- />
131
- }
132
- />
133
- </Form.Item>
134
- )}
135
-
136
- <Form.Item>
137
- <SubmitButton
138
- text={t('common.login')}
139
- className="password"
140
- ref={submitButtonRef}
141
- />
142
- </Form.Item>
143
- </Form>
144
- </div>
145
- )
146
- }
@@ -1,42 +0,0 @@
1
- import { FormItemProps } from 'antd/lib/form'
2
- import FormItem from 'antd/lib/form/FormItem'
3
- import React, { useMemo } from 'react'
4
- import { useTranslation } from 'react-i18next'
5
- import { PasswordLoginMethods } from '../../../AuthingGuard/api'
6
- import { EmailFormItem, PhoneFormItem } from '../../../ValidatorRules'
7
- import { fieldRequiredRule } from '../../../_utils'
8
-
9
- export interface FormItemAccountProps extends FormItemProps {
10
- passwordLoginMethods: PasswordLoginMethods[]
11
- }
12
-
13
- export const FormItemAccount: React.FC<FormItemAccountProps> = (props) => {
14
- const { passwordLoginMethods: methods, ...formItemPtops } = props
15
- const { t } = useTranslation()
16
-
17
- const runderTemplate = useMemo(() => {
18
- if (methods.length !== 1)
19
- return (
20
- <FormItem
21
- rules={fieldRequiredRule(t('common.account'))}
22
- {...formItemPtops}
23
- />
24
- )
25
-
26
- switch (methods[0]) {
27
- case 'phone-password':
28
- return <PhoneFormItem {...formItemPtops} />
29
- case 'email-password':
30
- return <EmailFormItem {...formItemPtops} />
31
- case 'username-password':
32
- return (
33
- <FormItem
34
- rules={fieldRequiredRule(t('common.username'))}
35
- {...formItemPtops}
36
- />
37
- )
38
- }
39
- }, [formItemPtops, methods, t])
40
-
41
- return <>{runderTemplate}</>
42
- }
@@ -1,31 +0,0 @@
1
- import { Row, Col } from 'antd'
2
- import Input, { InputProps } from 'antd/lib/input'
3
- import React from 'react'
4
- import { useTranslation } from 'react-i18next'
5
- import { ImagePro } from '../../../ImagePro'
6
-
7
- export interface GraphicVerifyCodeProps extends InputProps {
8
- verifyCodeUrl: string
9
- changeCode: () => void
10
- }
11
-
12
- export const GraphicVerifyCode: React.FC<GraphicVerifyCodeProps> = (props) => {
13
- const { verifyCodeUrl, changeCode, ...inputProps } = props
14
-
15
- const { t } = useTranslation()
16
-
17
- return (
18
- <div className="g2-graphic-verify-code">
19
- <Input {...inputProps} />
20
-
21
- <ImagePro
22
- className="g2-captcha-code-image"
23
- src={verifyCodeUrl}
24
- alt={t('login.captchaCode')}
25
- height="46px"
26
- style={{ cursor: 'pointer' }}
27
- onClick={() => changeCode()}
28
- />
29
- </div>
30
- )
31
- }
@@ -1,64 +0,0 @@
1
- import Input, { InputProps } from 'antd/lib/input'
2
- import React, { useMemo } from 'react'
3
- import { useTranslation } from 'react-i18next'
4
- import { PasswordLoginMethods } from '../../../AuthingGuard/api'
5
- import { InputNumber } from '../../../InputNumber'
6
-
7
- export interface InputAccountProps extends InputProps {
8
- passwordLoginMethods: PasswordLoginMethods[]
9
- }
10
-
11
- export const InputAccount: React.FC<InputAccountProps> = (props) => {
12
- const { passwordLoginMethods: methods, ...inputProps } = props
13
-
14
- const { t } = useTranslation()
15
-
16
- const loginMethodsText = useMemo<
17
- Record<
18
- PasswordLoginMethods,
19
- {
20
- t: string
21
- sort: number
22
- }
23
- >
24
- >(
25
- () => ({
26
- 'email-password': {
27
- t: t('common.email'),
28
- sort: 2,
29
- },
30
- 'phone-password': {
31
- t: t('common.phoneNumber'),
32
- sort: 1,
33
- },
34
- 'username-password': {
35
- t: t('common.username'),
36
- sort: 0,
37
- },
38
- }),
39
- [t]
40
- )
41
-
42
- const placeholder = useMemo(
43
- () =>
44
- t('login.inputAccount', {
45
- text: methods
46
- ?.map((item) => loginMethodsText[item])
47
- .sort((a, b) => a.sort - b.sort)
48
- .map((item) => item.t)
49
- .join(' / '),
50
- }),
51
- [loginMethodsText, methods, t]
52
- )
53
-
54
- const runderInput = useMemo(() => {
55
- if (methods.length === 1 && methods[0] === 'phone-password')
56
- return (
57
- <InputNumber maxLength={11} placeholder={placeholder} {...inputProps} />
58
- )
59
-
60
- return <Input placeholder={placeholder} {...inputProps} />
61
- }, [inputProps, methods, placeholder])
62
-
63
- return <>{runderInput}</>
64
- }
@@ -1,173 +0,0 @@
1
- import React, { useRef, useState } from 'react'
2
- import { Form, Input } from 'antd'
3
- import { UserOutlined, LockOutlined } from '@ant-design/icons'
4
- import { useTranslation } from 'react-i18next'
5
-
6
- import { useGuardHttp } from '../../../_utils/guradHttp'
7
- import { useAuthClient } from '../../../Guard/authClient'
8
- import { fieldRequiredRule, getUserRegisterParams } from '../../../_utils'
9
- import { ErrorCode } from '../../../_utils/GuardErrorCode'
10
- import SubmitButton from '../../../SubmitButton'
11
- import { PasswordLoginMethods } from '../../../AuthingGuard/api'
12
- import { LoginMethods } from '../../..'
13
- import { FormItemAccount } from './FormItemAccount'
14
- import { InputAccount } from './InputAccount'
15
- import { GraphicVerifyCode } from './GraphicVerifyCode'
16
-
17
- interface LoginWithPasswordProps {
18
- // configs
19
- publicKey: string
20
- autoRegister?: boolean
21
- host?: string
22
-
23
- // events
24
- onLogin: any
25
- onBeforeLogin: any
26
- passwordLoginMethods: PasswordLoginMethods[]
27
- }
28
-
29
- export const LoginWithPassword = (props: LoginWithPasswordProps) => {
30
- let { t } = useTranslation()
31
- let { post } = useGuardHttp()
32
- let client = useAuthClient()
33
-
34
- let submitButtonRef = useRef<any>(null)
35
-
36
- const [showCaptcha, setShowCaptcha] = useState(false)
37
- const [verifyCodeUrl, setVerifyCodeUrl] = useState('')
38
- const [remainCount, setRemainCount] = useState(0)
39
-
40
- const captchaUrl = `${props.host}/api/v2/security/captcha`
41
- const getCaptchaUrl = () => `${captchaUrl}?r=${+new Date()}`
42
-
43
- const encrypt = client.options.encryptFunction
44
-
45
- const onFinish = async (values: any) => {
46
- setRemainCount(0)
47
- // onBeforeLogin
48
- submitButtonRef.current.onSpin(true)
49
- let loginInfo = {
50
- type: LoginMethods.Password,
51
- data: {
52
- identity: values.account,
53
- password: values.password,
54
- captchaCode: values.captchaCode,
55
- },
56
- }
57
- let context = await props.onBeforeLogin(loginInfo)
58
- if (!context) {
59
- submitButtonRef.current.onSpin(false)
60
- return
61
- }
62
-
63
- // onLogin
64
- let url = '/api/v2/login/account'
65
- let account = values.account && values.account.trim()
66
- let password = values.password && values.password.trim()
67
- let captchaCode = values.captchaCode && values.captchaCode.trim()
68
-
69
- let body = {
70
- account: account,
71
- password: await encrypt!(password, props.publicKey),
72
- captchaCode,
73
- customData: getUserRegisterParams(),
74
- autoRegister: props.autoRegister,
75
- }
76
- const { code, message, data } = await post(url, body)
77
-
78
- if (code !== 200) {
79
- submitButtonRef.current.onError()
80
- }
81
-
82
- if (code === ErrorCode.INPUT_CAPTCHACODE) {
83
- setVerifyCodeUrl(getCaptchaUrl())
84
- setShowCaptcha(true)
85
- }
86
- if (code === ErrorCode.PASSWORD_ERROR) {
87
- if ((data as any)?.remainCount) {
88
- setRemainCount((data as any)?.remainCount ?? 0)
89
- }
90
- }
91
- submitButtonRef.current.onSpin(false)
92
- props.onLogin(code, data, message)
93
- }
94
-
95
- return (
96
- <div className="authing-g2-login-password">
97
- <Form
98
- name="passworLogin"
99
- onFinish={onFinish}
100
- onFinishFailed={() => submitButtonRef.current.onError()}
101
- autoComplete="off"
102
- >
103
- <FormItemAccount
104
- name="account"
105
- className="authing-g2-input-form"
106
- passwordLoginMethods={props.passwordLoginMethods}
107
- >
108
- <InputAccount
109
- className="authing-g2-input"
110
- autoComplete="email,username,tel"
111
- size="large"
112
- prefix={<UserOutlined style={{ color: '#878A95' }} />}
113
- passwordLoginMethods={props.passwordLoginMethods}
114
- />
115
- </FormItemAccount>
116
- <Form.Item
117
- name="password"
118
- className="authing-g2-input-form"
119
- rules={fieldRequiredRule(t('common.password'))}
120
- >
121
- <Input.Password
122
- className="authing-g2-input"
123
- size="large"
124
- placeholder={t('login.inputLoginPwd')}
125
- prefix={<LockOutlined style={{ color: '#878A95' }} />}
126
- />
127
- </Form.Item>
128
- {/* 图形验证码 */}
129
- {showCaptcha && (
130
- <Form.Item
131
- className="authing-g2-input-form"
132
- name="captchaCode"
133
- rules={fieldRequiredRule(t('common.captchaCode'))}
134
- >
135
- <GraphicVerifyCode
136
- className="authing-g2-input"
137
- size="large"
138
- placeholder={t('login.inputCaptchaCode')}
139
- verifyCodeUrl={verifyCodeUrl}
140
- changeCode={() => setVerifyCodeUrl(getCaptchaUrl())}
141
- />
142
- </Form.Item>
143
- )}
144
- {remainCount !== 0 && (
145
- <span
146
- style={{
147
- marginBottom: 23,
148
- fontSize: 12,
149
- color: '#E63333',
150
- display: 'block',
151
- }}
152
- >
153
- {t('common.loginFailCheck', {
154
- number: remainCount,
155
- })}
156
- </span>
157
- )}
158
-
159
- <Form.Item>
160
- <SubmitButton
161
- text={
162
- props.autoRegister
163
- ? `${t('common.login')} / ${t('common.register')}`
164
- : t('common.login')
165
- }
166
- className="password"
167
- ref={submitButtonRef}
168
- />
169
- </Form.Item>
170
- </Form>
171
- </div>
172
- )
173
- }
@@ -1,122 +0,0 @@
1
- import React, { useRef } from 'react'
2
- import { Form } from 'antd'
3
- import { useTranslation } from 'react-i18next'
4
- import { useAuthClient } from '../../Guard/authClient'
5
- import { UserOutlined, SafetyOutlined } from '@ant-design/icons'
6
- import { LoginMethods } from '../../'
7
- import { SendCode } from '../../SendCode'
8
- import { fieldRequiredRule } from '../../_utils'
9
- import SubmitButton from '../../SubmitButton'
10
- import { InputNumber } from '../../InputNumber'
11
- import { PhoneFormItem } from '../../ValidatorRules'
12
-
13
- // const formatPhone = (value: any) => {
14
- // if (!value) {
15
- // return ''
16
- // }
17
- // let a = value.slice(0, 3)
18
- // let b = value.slice(3, 7)
19
- // let c = value.slice(7, 11)
20
- // if (value.length < 4) {
21
- // return a
22
- // } else if (value.length < 8) {
23
- // return `${a}-${b}`
24
- // } else {
25
- // return `${a}-${b}-${c}`
26
- // }
27
- // }
28
- export const LoginWithPhoneCode = (props: any) => {
29
- let [form] = Form.useForm()
30
- let submitButtonRef = useRef<any>(null)
31
- const { t } = useTranslation()
32
-
33
- let client = useAuthClient()
34
-
35
- const verifyCodeLength = props.verifyCodeLength ?? 4
36
-
37
- const onFinish = async (values: any) => {
38
- submitButtonRef.current.onSpin(true)
39
- // onBeforeLogin
40
- let loginInfo = {
41
- type: LoginMethods.Password,
42
- data: {
43
- phone: values.phone,
44
- code: values.code,
45
- },
46
- }
47
- let context = await props.onBeforeLogin(loginInfo)
48
- if (!context) {
49
- submitButtonRef.current.onSpin(false)
50
- return
51
- }
52
-
53
- let loginContext = client.loginByPhoneCode(values.phone, values.code)
54
- loginContext
55
- .then((u) => {
56
- submitButtonRef.current.onSpin(false)
57
- props.onLogin(200, u)
58
- })
59
- .catch((e) => {
60
- submitButtonRef.current.onSpin(false)
61
- props.onLogin(e.code, e.data, e.message)
62
- })
63
- }
64
-
65
- return (
66
- <div className="authing-g2-login-phone-code">
67
- <Form
68
- name="phoneCode"
69
- form={form}
70
- onFinish={onFinish}
71
- onFinishFailed={() => submitButtonRef.current.onError()}
72
- autoComplete="off"
73
- >
74
- <PhoneFormItem className="authing-g2-input-form" name="phone">
75
- <InputNumber
76
- className="authing-g2-input"
77
- autoComplete="tel"
78
- type="tel"
79
- size="large"
80
- // 只有 InputNumber formatter、controls API
81
- maxLength={11}
82
- // formatter={formatPhone}
83
- // parser={(value) => (value ? value.replaceAll('-', '') : '')}
84
- placeholder={t('login.inputPhone')}
85
- prefix={<UserOutlined style={{ color: '#878A95' }} />}
86
- />
87
- </PhoneFormItem>
88
- <Form.Item
89
- className="authing-g2-input-form"
90
- name="code"
91
- rules={fieldRequiredRule(t('common.captchaCode'))}
92
- >
93
- <SendCode
94
- className="authing-g2-input"
95
- autoComplete="one-time-code"
96
- size="large"
97
- placeholder={t('common.inputFourVerifyCode', {
98
- length: verifyCodeLength,
99
- })}
100
- maxLength={verifyCodeLength}
101
- prefix={<SafetyOutlined style={{ color: '#878A95' }} />}
102
- method="phone"
103
- data={''}
104
- form={form}
105
- onSendCodeBefore={() => form.validateFields(['phone'])}
106
- />
107
- </Form.Item>
108
- <Form.Item>
109
- <SubmitButton
110
- text={
111
- props.autoRegister
112
- ? `${t('common.login')} / ${t('common.register')}`
113
- : t('common.login')
114
- }
115
- className="password"
116
- ref={submitButtonRef}
117
- />
118
- </Form.Item>
119
- </Form>
120
- </div>
121
- )
122
- }
@@ -1,60 +0,0 @@
1
- import React, { useEffect, useRef, useState } from 'react'
2
- import { message } from 'antd'
3
- import { ShieldSpin } from '../../ShieldSpin'
4
- import { useAuthClient } from '../../Guard/authClient'
5
-
6
- interface LoginWithWechatMiniQrcodeProps {
7
- onLogin: any
8
- canLoop: boolean
9
- qrCodeScanOptions: any
10
- }
11
-
12
- export const LoginWithWechatMiniQrcode = (
13
- props: LoginWithWechatMiniQrcodeProps
14
- ) => {
15
- const timerRef = useRef<any>()
16
- const client = useAuthClient()
17
- const [loading, setLoading] = useState(true)
18
- const appQrcodeClient = client.wxqrcode
19
-
20
- useEffect(() => {
21
- return () => {
22
- clearInterval(timerRef.current)
23
- }
24
- }, [])
25
-
26
- useEffect(() => {
27
- if (!props.canLoop) {
28
- return
29
- }
30
- appQrcodeClient.startScanning('authingGuardMiniQrcode', {
31
- autoExchangeUserInfo: true,
32
- ...props.qrCodeScanOptions,
33
- onCodeLoaded() {
34
- setLoading(false)
35
- },
36
- onStart(timer) {
37
- // console.log('开始扫码')
38
- timerRef.current = timer
39
- },
40
- onSuccess(user) {
41
- // console.log('扫码完成', user)
42
- // onSuccess && onSuccess(user as User)
43
- props.onLogin(200, user)
44
- },
45
- onError: (ms) => {
46
- // config.qrCodeScanOptions?.onError?.(message)
47
- // onFail && onFail(`${message}`)
48
- message.error(ms)
49
- },
50
- })
51
- // eslint-disable-next-line react-hooks/exhaustive-deps
52
- }, [appQrcodeClient, props.canLoop, props.qrCodeScanOptions])
53
-
54
- return (
55
- <div className="authing-g2-login-app-qrcode">
56
- {loading && <ShieldSpin />}
57
- <div id="authingGuardMiniQrcode"></div>
58
- </div>
59
- )
60
- }
@@ -1,53 +0,0 @@
1
- import React, { useEffect, useRef, useState } from 'react'
2
- import { ShieldSpin } from '../../ShieldSpin'
3
- import { useAuthClient } from '../../Guard/authClient'
4
-
5
- interface LoginWithWechatmpQrcodeProps {
6
- onLogin: any
7
- canLoop: boolean
8
- qrCodeScanOptions: any
9
- }
10
-
11
- export const LoginWithWechatmpQrcode = (
12
- props: LoginWithWechatmpQrcodeProps
13
- ) => {
14
- const timerRef = useRef<any>()
15
- const client = useAuthClient()
16
- const [loading, setLoading] = useState(true)
17
-
18
- const appQrcodeClient = client.wechatmpqrcode
19
- // const config = props.config
20
-
21
- useEffect(() => {
22
- if (!props.canLoop) {
23
- return
24
- }
25
- appQrcodeClient.startScanning('authingGuardMpQrcode', {
26
- autoExchangeUserInfo: true,
27
- ...props.qrCodeScanOptions,
28
- onCodeLoaded() {
29
- setLoading(false)
30
- },
31
- onStart(timer) {
32
- timerRef.current = timer
33
- },
34
- onSuccess(user) {
35
- props.onLogin(200, user)
36
- // onSuccess && onSuccess(user as User)
37
- },
38
- onError: (message) => {
39
- // config.qrCodeScanOptions?.onError?.(message)
40
- // onFail && onFail(`${message}`)
41
- },
42
- })
43
- return () => clearInterval(timerRef.current)
44
- // eslint-disable-next-line react-hooks/exhaustive-deps
45
- }, [appQrcodeClient, props.canLoop, props.qrCodeScanOptions])
46
-
47
- return (
48
- <div className="authing-g2-login-app-qrcode">
49
- {loading && <ShieldSpin />}
50
- <div id="authingGuardMpQrcode"></div>
51
- </div>
52
- )
53
- }