@authing/react-ui-components 3.0.2-beta.4 → 3.0.2-beta.9

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 (261) hide show
  1. package/lib/index.d.ts +453 -35
  2. package/lib/index.min.css +2 -2
  3. package/lib/index.min.js +1 -1
  4. package/package.json +25 -7
  5. package/.eslintignore +0 -6
  6. package/.eslintrc.js +0 -7
  7. package/.prettierrc +0 -5
  8. package/.vscode/settings.json +0 -31
  9. package/build/asset-manifest.json +0 -26
  10. package/build/favicon.ico +0 -0
  11. package/build/index.html +0 -1
  12. package/build/logo192.png +0 -0
  13. package/build/logo512.png +0 -0
  14. package/build/manifest.json +0 -25
  15. package/build/robots.txt +0 -3
  16. package/build/static/css/2.51c07e65.chunk.css +0 -3
  17. package/build/static/css/2.51c07e65.chunk.css.map +0 -1
  18. package/build/static/css/main.779f221a.chunk.css +0 -2
  19. package/build/static/css/main.779f221a.chunk.css.map +0 -1
  20. package/build/static/js/2.bbae9fdb.chunk.js +0 -3
  21. package/build/static/js/2.bbae9fdb.chunk.js.LICENSE.txt +0 -102
  22. package/build/static/js/2.bbae9fdb.chunk.js.map +0 -1
  23. package/build/static/js/3.fd17f196.chunk.js +0 -2
  24. package/build/static/js/3.fd17f196.chunk.js.map +0 -1
  25. package/build/static/js/main.5f341531.chunk.js +0 -2
  26. package/build/static/js/main.5f341531.chunk.js.map +0 -1
  27. package/build/static/js/runtime-main.ef138021.js +0 -2
  28. package/build/static/js/runtime-main.ef138021.js.map +0 -1
  29. package/build/static/media/loading.4a67a5f3.svg +0 -29
  30. package/components/AuthingDropdown/index.tsx +0 -52
  31. package/components/AuthingDropdown/style.less +0 -43
  32. package/components/AuthingGuard/AppMFALayout/index.tsx +0 -74
  33. package/components/AuthingGuard/AppMFALayout/style.less +0 -12
  34. package/components/AuthingGuard/CompleteUserInfoLayout/index.tsx +0 -29
  35. package/components/AuthingGuard/CompleteUserInfoLayout/style.less +0 -8
  36. package/components/AuthingGuard/Forms/ADLoginForm/index.tsx +0 -117
  37. package/components/AuthingGuard/Forms/Agreements/index.tsx +0 -81
  38. package/components/AuthingGuard/Forms/Agreements/style.less +0 -44
  39. package/components/AuthingGuard/Forms/CompleteUserInfoForm/index.tsx +0 -139
  40. package/components/AuthingGuard/Forms/EmailMfaVerifyForm/CheckEmailForm.tsx +0 -84
  41. package/components/AuthingGuard/Forms/EmailMfaVerifyForm/VerifyCodeForm.tsx +0 -116
  42. package/components/AuthingGuard/Forms/EmailMfaVerifyForm/index.tsx +0 -40
  43. package/components/AuthingGuard/Forms/EmailMfaVerifyForm/style.less +0 -0
  44. package/components/AuthingGuard/Forms/EmailRegisterForm/index.tsx +0 -181
  45. package/components/AuthingGuard/Forms/EmailRegisterForm/style.less +0 -0
  46. package/components/AuthingGuard/Forms/LdapLoginForm/index.tsx +0 -166
  47. package/components/AuthingGuard/Forms/LdapLoginForm/style.less +0 -0
  48. package/components/AuthingGuard/Forms/LoginFormFooter/index.tsx +0 -76
  49. package/components/AuthingGuard/Forms/LoginFormFooter/style.less +0 -6
  50. package/components/AuthingGuard/Forms/MfaResetCodeForm/Step1.tsx +0 -86
  51. package/components/AuthingGuard/Forms/MfaResetCodeForm/Step2.tsx +0 -53
  52. package/components/AuthingGuard/Forms/MfaResetCodeForm/index.tsx +0 -65
  53. package/components/AuthingGuard/Forms/MfaResetCodeForm/style.less +0 -20
  54. package/components/AuthingGuard/Forms/MfaVerifyForm/index.tsx +0 -105
  55. package/components/AuthingGuard/Forms/MfaVerifyForm/style.less +0 -12
  56. package/components/AuthingGuard/Forms/PasswordLoginForm/index.tsx +0 -261
  57. package/components/AuthingGuard/Forms/PhoneCodeLoginForm/index.tsx +0 -133
  58. package/components/AuthingGuard/Forms/PhoneRegisterForm/index.tsx +0 -202
  59. package/components/AuthingGuard/Forms/QrCodeLoginForm/index.tsx +0 -59
  60. package/components/AuthingGuard/Forms/QrCodeLoginForm/style.less +0 -14
  61. package/components/AuthingGuard/Forms/RegisterFormFooter/index.tsx +0 -56
  62. package/components/AuthingGuard/Forms/RegisterFormFooter/style.less +0 -0
  63. package/components/AuthingGuard/Forms/ResetPwdForm/Footer.tsx +0 -21
  64. package/components/AuthingGuard/Forms/ResetPwdForm/Step1.tsx +0 -86
  65. package/components/AuthingGuard/Forms/ResetPwdForm/Step2.tsx +0 -127
  66. package/components/AuthingGuard/Forms/ResetPwdForm/Step3.tsx +0 -141
  67. package/components/AuthingGuard/Forms/ResetPwdForm/Step4.tsx +0 -51
  68. package/components/AuthingGuard/Forms/ResetPwdForm/index.tsx +0 -96
  69. package/components/AuthingGuard/Forms/ResetPwdForm/style.less +0 -3
  70. package/components/AuthingGuard/Forms/SendPhoneCode/SendCodeBtn.tsx +0 -88
  71. package/components/AuthingGuard/Forms/SendPhoneCode/index.tsx +0 -50
  72. package/components/AuthingGuard/Forms/SendPhoneCode/style.less +0 -26
  73. package/components/AuthingGuard/Forms/SmsMfaVerifyForm/CheckPhoneForm.tsx +0 -86
  74. package/components/AuthingGuard/Forms/SmsMfaVerifyForm/VerifyCodeForm.tsx +0 -113
  75. package/components/AuthingGuard/Forms/SmsMfaVerifyForm/index.tsx +0 -40
  76. package/components/AuthingGuard/Forms/SmsMfaVerifyForm/style.less +0 -3
  77. package/components/AuthingGuard/Forms/SocialAndIdpLogin/index.tsx +0 -325
  78. package/components/AuthingGuard/Forms/SocialAndIdpLogin/style.less +0 -75
  79. package/components/AuthingGuard/Forms/UploadImage/index.tsx +0 -70
  80. package/components/AuthingGuard/Forms/index.ts +0 -13
  81. package/components/AuthingGuard/GuardLayout/index.tsx +0 -474
  82. package/components/AuthingGuard/GuardLayout/style.less +0 -111
  83. package/components/AuthingGuard/Header/index.tsx +0 -25
  84. package/components/AuthingGuard/Header/style.less +0 -52
  85. package/components/AuthingGuard/IconFont/iconfont.js +0 -74
  86. package/components/AuthingGuard/IconFont/index.tsx +0 -19
  87. package/components/AuthingGuard/IconFont/style.less +0 -6
  88. package/components/AuthingGuard/IconFont/svg.js +0 -2
  89. package/components/AuthingGuard/LoginLayout/index.tsx +0 -161
  90. package/components/AuthingGuard/LoginLayout/style.less +0 -0
  91. package/components/AuthingGuard/MfaLayout/Steps.ts +0 -4
  92. package/components/AuthingGuard/MfaLayout/index.tsx +0 -49
  93. package/components/AuthingGuard/MfaLayout/style.less +0 -3
  94. package/components/AuthingGuard/RegisterLayout/index.tsx +0 -89
  95. package/components/AuthingGuard/RegisterLayout/style.less +0 -0
  96. package/components/AuthingGuard/ResetPwdLayout/index.tsx +0 -20
  97. package/components/AuthingGuard/ToggleLang/index.tsx +0 -51
  98. package/components/AuthingGuard/api/appConfig.ts +0 -146
  99. package/components/AuthingGuard/api/index.ts +0 -3
  100. package/components/AuthingGuard/api/sso.ts +0 -29
  101. package/components/AuthingGuard/api/userPoolConfig.ts +0 -111
  102. package/components/AuthingGuard/constants.ts +0 -107
  103. package/components/AuthingGuard/hooks/index.tsx +0 -70
  104. package/components/AuthingGuard/hooks/useScreenSize.tsx +0 -68
  105. package/components/AuthingGuard/index.tsx +0 -126
  106. package/components/AuthingGuard/style.less +0 -103
  107. package/components/AuthingGuard/types/Forms.ts +0 -94
  108. package/components/AuthingGuard/types/GuardConfig.ts +0 -420
  109. package/components/AuthingGuard/types/GuardState.ts +0 -7
  110. package/components/AuthingGuard/types/Locales.ts +0 -12
  111. package/components/AuthingGuard/types/index.ts +0 -4
  112. package/components/AuthingTabs/index.tsx +0 -98
  113. package/components/AuthingTabs/style.less +0 -135
  114. package/components/BindTotp/core/bindSuccess.tsx +0 -72
  115. package/components/BindTotp/core/securityCode.tsx +0 -108
  116. package/components/BindTotp/index.tsx +0 -134
  117. package/components/BindTotp/interface.ts +0 -30
  118. package/components/BindTotp/styles.less +0 -57
  119. package/components/ChangeLanguage/index.tsx +0 -35
  120. package/components/ChangePassword/core/firstLoginReset.tsx +0 -104
  121. package/components/ChangePassword/core/rotateReset.tsx +0 -114
  122. package/components/ChangePassword/index.tsx +0 -59
  123. package/components/CompleteInfo/core/completeInfo.tsx +0 -155
  124. package/components/CompleteInfo/index.tsx +0 -45
  125. package/components/CompleteInfo/interface.ts +0 -40
  126. package/components/CompleteInfo/styles.less +0 -7
  127. package/components/CopyAbleText/index.tsx +0 -54
  128. package/components/CopyAbleText/style.less +0 -13
  129. package/components/DownloadAuthenticator/index.tsx +0 -97
  130. package/components/DownloadAuthenticator/interface.ts +0 -22
  131. package/components/DownloadAuthenticator/styles.less +0 -52
  132. package/components/Error/index.tsx +0 -21
  133. package/components/Error/interface.ts +0 -9
  134. package/components/Error/styles.less +0 -12
  135. package/components/ForgetPassword/core/resetPassword.tsx +0 -162
  136. package/components/ForgetPassword/index.tsx +0 -78
  137. package/components/ForgetPassword/interface.ts +0 -32
  138. package/components/Guard/Guard.tsx +0 -287
  139. package/components/Guard/authClient.ts +0 -44
  140. package/components/Guard/config.ts +0 -19
  141. package/components/Guard/event.ts +0 -52
  142. package/components/Guard/index.tsx +0 -4
  143. package/components/Guard/module.ts +0 -20
  144. package/components/Guard/stateMachine.ts +0 -152
  145. package/components/Guard/styles.less +0 -461
  146. package/components/IconFont/iconfont.js +0 -74
  147. package/components/IconFont/index.tsx +0 -16
  148. package/components/IconFont/style.less +0 -6
  149. package/components/IconFont/svg.js +0 -2
  150. package/components/ImagePro/index.tsx +0 -53
  151. package/components/ImagePro/styles.less +0 -40
  152. package/components/InputNumber/index.tsx +0 -33
  153. package/components/Login/codemap.ts +0 -47
  154. package/components/Login/core/withAD.tsx +0 -9
  155. package/components/Login/core/withAppQrcode.tsx +0 -49
  156. package/components/Login/core/withLDAP.tsx +0 -146
  157. package/components/Login/core/withPassword/FormItemAccount.tsx +0 -42
  158. package/components/Login/core/withPassword/GraphicVerifyCode.tsx +0 -30
  159. package/components/Login/core/withPassword/InputAccount.tsx +0 -64
  160. package/components/Login/core/withPassword/index.tsx +0 -173
  161. package/components/Login/core/withPhonecode.tsx +0 -122
  162. package/components/Login/core/withWechatMiniQrcode.tsx +0 -60
  163. package/components/Login/core/withWechatmpQrcode.tsx +0 -53
  164. package/components/Login/index.tsx +0 -373
  165. package/components/Login/props.ts +0 -74
  166. package/components/Login/socialLogin/index.tsx +0 -407
  167. package/components/Login/socialLogin/style.less +0 -69
  168. package/components/Login/styles.less +0 -53
  169. package/components/MFA/VerifyCodeInput/VerifyCodeFormItem.tsx +0 -41
  170. package/components/MFA/VerifyCodeInput/index.tsx +0 -145
  171. package/components/MFA/VerifyCodeInput/style.less +0 -35
  172. package/components/MFA/codemap.ts +0 -24
  173. package/components/MFA/core/email.tsx +0 -203
  174. package/components/MFA/core/face.tsx +0 -297
  175. package/components/MFA/core/face_deps.tsx +0 -37
  176. package/components/MFA/core/sms.tsx +0 -203
  177. package/components/MFA/core/totp.tsx +0 -122
  178. package/components/MFA/index.tsx +0 -143
  179. package/components/MFA/mfaMethods/index.tsx +0 -88
  180. package/components/MFA/mfaMethods/style.less +0 -39
  181. package/components/MFA/props.ts +0 -51
  182. package/components/MFA/styles.less +0 -100
  183. package/components/NeedHelpView/core/describeQuestions.tsx +0 -245
  184. package/components/NeedHelpView/index.tsx +0 -47
  185. package/components/RecoveryCode/core/useCode.tsx +0 -71
  186. package/components/RecoveryCode/index.tsx +0 -27
  187. package/components/RecoveryCode/interface.ts +0 -31
  188. package/components/RecoveryCode/style.less +0 -13
  189. package/components/Register/codemap.ts +0 -12
  190. package/components/Register/components/Agreements/index.tsx +0 -81
  191. package/components/Register/components/Agreements/style.less +0 -44
  192. package/components/Register/core/WithEmail.tsx +0 -242
  193. package/components/Register/core/WithPhone.tsx +0 -184
  194. package/components/Register/index.tsx +0 -139
  195. package/components/Register/props.ts +0 -50
  196. package/components/SendCode/SendCodeBtn.tsx +0 -96
  197. package/components/SendCode/index.tsx +0 -94
  198. package/components/SendCode/style.less +0 -31
  199. package/components/ShieldSpin/index.tsx +0 -27
  200. package/components/ShieldSpin/loading.svg +0 -29
  201. package/components/SubmitButton/index.tsx +0 -50
  202. package/components/SubmitSuccess/index.tsx +0 -66
  203. package/components/SubmitSuccess/interface.ts +0 -17
  204. package/components/Type/index.ts +0 -52
  205. package/components/ValidatorRules/ValidatorFormItem.tsx +0 -139
  206. package/components/ValidatorRules/index.ts +0 -20
  207. package/components/VerifyCodeInput/index.tsx +0 -76
  208. package/components/VerifyCodeInput/style.less +0 -24
  209. package/components/_utils/GuardErrorCode.ts +0 -9
  210. package/components/_utils/clipboard.ts +0 -27
  211. package/components/_utils/config.ts +0 -116
  212. package/components/_utils/guradHttp.ts +0 -97
  213. package/components/_utils/hooks/index.ts +0 -64
  214. package/components/_utils/http.ts +0 -85
  215. package/components/_utils/index.ts +0 -322
  216. package/components/_utils/locales/en/common.json +0 -227
  217. package/components/_utils/locales/en/index.ts +0 -6
  218. package/components/_utils/locales/en/login.json +0 -96
  219. package/components/_utils/locales/en/map.json +0 -4
  220. package/components/_utils/locales/en/user.json +0 -82
  221. package/components/_utils/locales/index.ts +0 -45
  222. package/components/_utils/locales/zh/common.json +0 -227
  223. package/components/_utils/locales/zh/index.ts +0 -6
  224. package/components/_utils/locales/zh/login.json +0 -96
  225. package/components/_utils/locales/zh/map.json +0 -4
  226. package/components/_utils/locales/zh/user.json +0 -82
  227. package/components/_utils/popupCenter.ts +0 -48
  228. package/components/assets/images/error.png +0 -0
  229. package/components/context/base.tsx +0 -28
  230. package/components/context/global/context.tsx +0 -39
  231. package/components/context/global/reducer.tsx +0 -56
  232. package/components/context/module/context.tsx +0 -23
  233. package/components/index.ts +0 -12
  234. package/config/antdReplacer.js +0 -51
  235. package/config/env.js +0 -104
  236. package/config/getHttpsConfig.js +0 -66
  237. package/config/jest/cssTransform.js +0 -14
  238. package/config/jest/fileTransform.js +0 -40
  239. package/config/modules.js +0 -134
  240. package/config/paths.js +0 -71
  241. package/config/pnpTs.js +0 -35
  242. package/config/webpack.config.js +0 -835
  243. package/config/webpackDevServer.config.js +0 -130
  244. package/examples.tsx +0 -86
  245. package/index.js +0 -1
  246. package/logo.svg +0 -7
  247. package/public/favicon.ico +0 -0
  248. package/public/index.html +0 -43
  249. package/public/logo192.png +0 -0
  250. package/public/logo512.png +0 -0
  251. package/public/manifest.json +0 -25
  252. package/public/robots.txt +0 -3
  253. package/react-app-env.d.ts +0 -71
  254. package/reportWebVitals.ts +0 -15
  255. package/scripts/build.js +0 -208
  256. package/scripts/lib.js +0 -200
  257. package/scripts/publish.js +0 -57
  258. package/scripts/start.js +0 -162
  259. package/scripts/test.js +0 -49
  260. package/setupTests.ts +0 -5
  261. package/tsconfig.json +0 -30
@@ -1,203 +0,0 @@
1
- import { UserOutlined } from '@ant-design/icons'
2
- import { message } from 'antd'
3
- import { Form } from 'antd'
4
- import { User } from 'authing-js-sdk'
5
- import React, { useRef, useState } from 'react'
6
- import { useTranslation } from 'react-i18next'
7
- import { VerifyCodeInput } from '../VerifyCodeInput'
8
- import { useAuthClient } from '../../Guard/authClient'
9
- import { SendCodeBtn } from '../../SendCode/SendCodeBtn'
10
- import SubmitButton from '../../SubmitButton'
11
- import { ICheckProps, PhoneFormItem } from '../../ValidatorRules'
12
- import { VerifyCodeFormItem } from '../VerifyCodeInput/VerifyCodeFormItem'
13
- import { MFAConfig } from '../props'
14
- import { InputNumber } from '../../InputNumber'
15
- export interface BindMFASmsProps {
16
- mfaToken: string
17
- onBind: (phone: string) => void
18
- config: any
19
- }
20
-
21
- export const BindMFASms: React.FC<BindMFASmsProps> = ({
22
- mfaToken,
23
- onBind,
24
- config,
25
- }) => {
26
- const submitButtonRef = useRef<any>(null)
27
- const { t } = useTranslation()
28
- const [form] = Form.useForm()
29
-
30
- const ref = useRef<ICheckProps>(null)
31
- const onFinish = async ({ phone }: any) => {
32
- submitButtonRef.current.onSpin(true)
33
- await form.validateFields()
34
- try {
35
- onBind(phone)
36
- } catch (e) {
37
- // do nothing
38
- submitButtonRef.current?.onError()
39
- } finally {
40
- submitButtonRef.current?.onSpin(false)
41
- }
42
- }
43
-
44
- return (
45
- <>
46
- <h3 className="authing-g2-mfa-title">{t('common.bindPhone')}</h3>
47
- <p className="authing-g2-mfa-tips">{t('login.bindPhoneInfo')}</p>
48
- <Form
49
- form={form}
50
- onFinish={onFinish}
51
- onFinishFailed={() => submitButtonRef.current.onError()}
52
- onValuesChange={(values) => {
53
- ref.current?.check(values)
54
- }}
55
- >
56
- <PhoneFormItem
57
- className="authing-g2-input-form"
58
- name="phone"
59
- userPoolId={config.__publicConfig__.userPoolId}
60
- form={form}
61
- ref={ref}
62
- checkRepeat={true}
63
- >
64
- <InputNumber
65
- className="authing-g2-input"
66
- autoComplete="tel"
67
- size="large"
68
- placeholder={t('login.inputPhone')}
69
- prefix={<UserOutlined style={{ color: '#878A95' }} />}
70
- />
71
- </PhoneFormItem>
72
- <SubmitButton text={t('common.sure')} ref={submitButtonRef} />
73
- </Form>
74
- </>
75
- )
76
- }
77
-
78
- export interface VerifyMFASmsProps {
79
- mfaToken: string
80
- phone: string
81
- onVerify: (code: number, data: any) => void
82
- sendCodeRef: React.RefObject<HTMLButtonElement>
83
- codeLength: number
84
- }
85
-
86
- export const VerifyMFASms: React.FC<VerifyMFASmsProps> = ({
87
- mfaToken,
88
- phone,
89
- onVerify,
90
- sendCodeRef,
91
- codeLength = 4,
92
- }) => {
93
- const authClient = useAuthClient()
94
- const submitButtonRef = useRef<any>(null)
95
- const { t } = useTranslation()
96
- const [form] = Form.useForm()
97
-
98
- const [sent, setSent] = useState(false)
99
-
100
- const onFinish = async (values: any) => {
101
- submitButtonRef.current.onSpin(true)
102
- const mfaCode = form.getFieldValue('mfaCode')
103
- try {
104
- const user: User = await authClient.mfa.verifyAppSmsMfa({
105
- mfaToken,
106
- phone: phone!,
107
- code: mfaCode.join(''),
108
- })
109
- // TODO
110
- onVerify(200, user)
111
- } catch (e) {
112
- const error = JSON.parse(e.message)
113
- submitButtonRef.current.onError()
114
- onVerify(error.code as number, error)
115
- } finally {
116
- submitButtonRef.current?.onSpin(false)
117
- }
118
- }
119
-
120
- const sendVerifyCode = async () => {
121
- try {
122
- await authClient.sendSmsCode(phone!)
123
- setSent(true)
124
- return true
125
- } catch (e) {
126
- const errorMessage = JSON.parse(e.message)
127
- message.error(errorMessage.message)
128
- return false
129
- }
130
- }
131
-
132
- return (
133
- <>
134
- <h3 className="authing-g2-mfa-title">{t('login.inputPhoneCode')}</h3>
135
- <p className="authing-g2-mfa-tips">
136
- {sent
137
- ? `${t('login.verifyCodeSended')} ${phone}`
138
- : t('login.clickSent')}
139
- </p>
140
- <Form
141
- form={form}
142
- onFinish={onFinish}
143
- onFinishFailed={() => submitButtonRef.current.onError()}
144
- >
145
- <VerifyCodeFormItem
146
- codeLength={codeLength}
147
- ruleKeyword={t('common.captchaCode')}
148
- >
149
- <VerifyCodeInput length={codeLength} />
150
- </VerifyCodeFormItem>
151
-
152
- <SendCodeBtn
153
- btnRef={sendCodeRef}
154
- beforeSend={() => sendVerifyCode()}
155
- type="link"
156
- />
157
-
158
- <SubmitButton
159
- text={t('common.sure')}
160
- ref={submitButtonRef}
161
- className="g2-mfa-submit-button"
162
- />
163
- </Form>
164
- </>
165
- )
166
- }
167
-
168
- export const MFASms: React.FC<{
169
- mfaToken: string
170
- phone?: string
171
- mfaLogin: any
172
- config: MFAConfig
173
- }> = ({ phone: userPhone, mfaToken, mfaLogin, config }) => {
174
- const [phone, setPhone] = useState(userPhone)
175
- const sendCodeRef = useRef<HTMLButtonElement>(null)
176
-
177
- const codeLength = config.__publicConfig__?.verifyCodeLength
178
-
179
- return (
180
- <>
181
- {phone ? (
182
- <VerifyMFASms
183
- mfaToken={mfaToken}
184
- phone={phone}
185
- onVerify={(code, data) => {
186
- mfaLogin(code, data)
187
- }}
188
- codeLength={codeLength ?? 4}
189
- sendCodeRef={sendCodeRef}
190
- />
191
- ) : (
192
- <BindMFASms
193
- config={config}
194
- mfaToken={mfaToken}
195
- onBind={(phone: string) => {
196
- setPhone(phone)
197
- sendCodeRef.current?.click()
198
- }}
199
- />
200
- )}
201
- </>
202
- )
203
- }
@@ -1,122 +0,0 @@
1
- import { Form } from 'antd'
2
- import React, { useRef } from 'react'
3
- import { useTranslation } from 'react-i18next'
4
- import { useAsyncFn } from 'react-use'
5
- import { GuardModuleType } from '../../Guard/module'
6
- import { useGuardHttp } from '../../_utils/guradHttp'
7
- import { GuardMFAInitData, MFAConfig } from '../props'
8
- import { message as Message } from 'antd'
9
- import SubmitButton from '../../SubmitButton'
10
- import { VerifyCodeFormItem } from '../VerifyCodeInput/VerifyCodeFormItem'
11
- import { VerifyCodeInput } from '../VerifyCodeInput'
12
- export interface BindMFATotpProps {
13
- initData: GuardMFAInitData
14
- changeModule: any
15
- }
16
-
17
- export const BindMFATotp: React.FC<BindMFATotpProps> = ({
18
- changeModule,
19
- initData,
20
- }) => {
21
- const { t } = useTranslation()
22
-
23
- const next = () => changeModule(GuardModuleType.BIND_TOTP, initData)
24
- return (
25
- <>
26
- <p className="authing-g2-mfa-title">{t('common.bindTotp')}</p>
27
- <p className="authing-g2-mfa-tips">{t('common.otpText1')}</p>
28
- <SubmitButton
29
- text={t('common.sure')}
30
- onClick={next}
31
- className="g2-mfa-submit-button bind-totp"
32
- />
33
- </>
34
- )
35
- }
36
-
37
- export interface VerifyMFATotpProps {
38
- mfaToken: string
39
- mfaLogin: any
40
- }
41
-
42
- export const VerifyMFATotp: React.FC<VerifyMFATotpProps> = ({
43
- mfaToken,
44
- mfaLogin,
45
- }) => {
46
- const { t } = useTranslation()
47
- const [form] = Form.useForm()
48
-
49
- const submitButtonRef = useRef<any>(null)
50
-
51
- const { post } = useGuardHttp()
52
-
53
- const [, onFinish] = useAsyncFn(async () => {
54
- submitButtonRef.current.onSpin(true)
55
-
56
- const mfaCode = form.getFieldValue('mfaCode')
57
- try {
58
- const { code, data, message } = await post(
59
- '/api/v2/mfa/totp/verify',
60
- {
61
- totp: mfaCode.join(''),
62
- },
63
- {
64
- headers: {
65
- authorization: mfaToken,
66
- },
67
- }
68
- )
69
-
70
- if (code !== 200) {
71
- mfaLogin(200, message)
72
- Message.error(message)
73
- } else {
74
- mfaLogin(200, data)
75
- }
76
- } finally {
77
- submitButtonRef.current.onSpin(false)
78
- }
79
- }, [mfaToken])
80
-
81
- return (
82
- <>
83
- <p className="authing-g2-mfa-title">{t('login.accPwdLoginVerify')}</p>
84
- <p className="authing-g2-mfa-tips">{t('login.inputSixCode')}</p>
85
- <Form
86
- form={form}
87
- onSubmitCapture={() => {}}
88
- onFinish={onFinish}
89
- onFinishFailed={() => submitButtonRef.current.onError()}
90
- >
91
- <VerifyCodeFormItem codeLength={6}>
92
- <VerifyCodeInput length={6} showDivider={true} gutter={'10px'} />
93
- </VerifyCodeFormItem>
94
-
95
- <SubmitButton text={t('common.sure')} ref={submitButtonRef} />
96
- </Form>
97
- </>
98
- )
99
- }
100
-
101
- export interface MFATotpProps {
102
- changeModule: any
103
- config: MFAConfig
104
- initData: GuardMFAInitData
105
- mfaLogin: any
106
- }
107
-
108
- export const MFATotp: React.FC<MFATotpProps> = ({
109
- changeModule,
110
- initData,
111
- mfaLogin,
112
- }) => {
113
- return (
114
- <>
115
- {initData.totpMfaEnabled ? (
116
- <VerifyMFATotp mfaToken={initData.mfaToken} mfaLogin={mfaLogin} />
117
- ) : (
118
- <BindMFATotp initData={initData} changeModule={changeModule} />
119
- )}
120
- </>
121
- )
122
- }
@@ -1,143 +0,0 @@
1
- import React, { useState } from 'react'
2
- import { useTranslation } from 'react-i18next'
3
- import { GuardModuleType } from '../Guard/module'
4
- import { IconFont } from '../IconFont'
5
- import { MFAEmail } from './core/email'
6
- import { MFASms } from './core/sms'
7
- import { MFAFace } from './core/face'
8
- import { MFATotp } from './core/totp'
9
- import { MFAMethods } from './mfaMethods'
10
- import { GuardMFAViewProps, MFAType } from './props'
11
- import { useAuthClient } from '../Guard/authClient'
12
- import { codeMap } from './codemap'
13
- import './styles.less'
14
- import { message } from 'antd'
15
- const window: Window = require('global/window')
16
-
17
- const ComponentsMapping: Record<MFAType, (props: any) => React.ReactNode> = {
18
- [MFAType.EMAIL]: ({ config, initData, mfaLogin }) => (
19
- <MFAEmail
20
- config={config}
21
- mfaToken={initData.mfaToken}
22
- email={initData.email}
23
- mfaLogin={mfaLogin}
24
- />
25
- ),
26
- [MFAType.SMS]: ({ config, initData, mfaLogin }) => (
27
- <MFASms
28
- config={config}
29
- mfaToken={initData.mfaToken}
30
- phone={initData.phone}
31
- mfaLogin={mfaLogin}
32
- />
33
- ),
34
- [MFAType.TOTP]: ({ initData, config, changeModule, mfaLogin }) => (
35
- <MFATotp
36
- changeModule={changeModule}
37
- config={config}
38
- initData={initData}
39
- mfaLogin={mfaLogin}
40
- />
41
- ),
42
- [MFAType.FACE]: ({ config, initData, mfaLogin, setShowMethods }) => (
43
- <MFAFace
44
- config={config}
45
- initData={initData}
46
- mfaLogin={mfaLogin}
47
- setShowMethods={setShowMethods}
48
- />
49
- ),
50
- }
51
-
52
- export const GuardMFAView: React.FC<GuardMFAViewProps> = ({
53
- initData,
54
- config,
55
- __changeModule,
56
- onLogin,
57
- }) => {
58
- const [currentMethod, setCurrentMethod] = useState(
59
- initData.current ??
60
- initData.applicationMfa?.sort((a, b) => a.sort - b.sort)[0].mfaPolicy
61
- )
62
- const [showMethods, setShowMethods] = useState(true)
63
- const client = useAuthClient()
64
- const { t } = useTranslation()
65
-
66
- const onBack = () => window.history.back()
67
-
68
- const __codePaser = (code: number) => {
69
- const action = codeMap[code]
70
- if (code === 200) {
71
- return (data: any) => {
72
- onLogin?.(data, client) // 登录成功
73
- }
74
- }
75
-
76
- if (!action) {
77
- return () => {
78
- console.error('not catch code', code)
79
- // props.onLoginError?.(data, client) // 未捕获 code
80
- }
81
- }
82
-
83
- // 解析成功
84
- if (action?.action === 'changeModule') {
85
- let m = action.module ? action.module : GuardModuleType.ERROR
86
- return (initData?: any) => __changeModule?.(m, initData)
87
- }
88
- if (action?.action === 'insideFix') {
89
- return () => {}
90
- }
91
-
92
- if (action?.action === 'message') {
93
- return (data: any) => {
94
- message.error(data.message)
95
- }
96
- }
97
-
98
- // 最终结果
99
- return () => {
100
- // props.onLoginError?.(data, client!) // 未捕获 code
101
- console.error('last action at mfaview')
102
- }
103
- }
104
-
105
- const mfaLogin = (code: any, data: any, message?: string) => {
106
- const callback = __codePaser?.(code)
107
-
108
- if (!data) {
109
- data = {}
110
- }
111
- data.__message = message
112
- callback?.(data)
113
- }
114
-
115
- return (
116
- <div className="g2-view-container">
117
- <div className="g2-view-back">
118
- <span onClick={onBack}>
119
- <IconFont type="authing-back" />
120
- <span>{t('common.backLoginPage')}</span>
121
- </span>
122
- </div>
123
- <div className="g2-mfa-content">
124
- {ComponentsMapping[currentMethod]({
125
- config: config,
126
- initData: initData,
127
- changeModule: __changeModule,
128
- mfaLogin: mfaLogin,
129
- setShowMethods: setShowMethods,
130
- })}
131
- </div>
132
- {showMethods && (
133
- <MFAMethods
134
- applicationMfa={initData.applicationMfa}
135
- method={currentMethod}
136
- onChangeMethod={(type) => {
137
- setCurrentMethod(type)
138
- }}
139
- />
140
- )}
141
- </div>
142
- )
143
- }
@@ -1,88 +0,0 @@
1
- import React, { useMemo, useState } from 'react'
2
- import { useTranslation } from 'react-i18next'
3
- import { Button } from 'antd'
4
- import { IconFont } from '../../IconFont'
5
- import { GuardMFAInitData, MFAType } from '../props'
6
- import { i18n } from '../../_utils/locales'
7
- import './style.less'
8
-
9
- export interface MFAMethodsProps {
10
- applicationMfa: GuardMFAInitData['applicationMfa']
11
- method: MFAType
12
- onChangeMethod: (type: MFAType) => void
13
- }
14
-
15
- const methodTitleMapping: Record<
16
- MFAType,
17
- {
18
- title: () => string
19
- icon: string
20
- }
21
- > = {
22
- [MFAType.EMAIL]: {
23
- title: () => i18n.t('common.EmailVerification'),
24
- icon: 'authing-mail',
25
- },
26
- [MFAType.SMS]: {
27
- title: () => i18n.t('common.SMS'),
28
- icon: 'authing-phone',
29
- },
30
- [MFAType.TOTP]: {
31
- title: () => i18n.t('common.OTPVerification'),
32
- icon: 'authing-totp',
33
- },
34
- [MFAType.FACE]: {
35
- title: () => i18n.t('common.faceVerification'),
36
- icon: 'authing-face',
37
- },
38
- }
39
-
40
- export const MFAMethods: React.FC<MFAMethodsProps> = ({
41
- applicationMfa = [],
42
- method,
43
- onChangeMethod,
44
- }) => {
45
- const [currentMethod, setCurrentMethod] = useState(method)
46
- const { t } = useTranslation()
47
-
48
- const otherMethods = useMemo(
49
- () =>
50
- applicationMfa
51
- .filter((item) => item.mfaPolicy !== currentMethod)
52
- .sort((a, b) => a.sort - b.sort)
53
- .map((item) => (
54
- <Button
55
- className="g2-guard-mfa-methods-btn"
56
- onClick={(e) => {
57
- onChangeMethod(item.mfaPolicy)
58
- setCurrentMethod(item.mfaPolicy)
59
- }}
60
- key={item.mfaPolicy}
61
- >
62
- <IconFont type={methodTitleMapping[item.mfaPolicy].icon} />
63
- {`${methodTitleMapping[item.mfaPolicy].title()}`}
64
- </Button>
65
- )),
66
- [applicationMfa, currentMethod, onChangeMethod]
67
- )
68
-
69
- return (
70
- <>
71
- {otherMethods.length !== 0 && (
72
- <>
73
- <div
74
- style={{
75
- minHeight: 32,
76
- }}
77
- />
78
- <div className="g2-mfa-method">
79
- <div className="g2-mfa-method-title">
80
- {t('login.otherVerifyWay')}
81
- </div>
82
- {otherMethods}
83
- </div>
84
- </>
85
- )}
86
- </>
87
- )
88
- }
@@ -1,39 +0,0 @@
1
- .g2-mfa-method {
2
- padding: 0 38px;
3
- }
4
-
5
- .g2-mfa-method-title {
6
- text-align: center;
7
- font-size: 14px;
8
- color: #c8c9cc;
9
- margin-bottom: 8px;
10
- width: 100%;
11
- }
12
-
13
- .g2-mfa-method-title::before,
14
- .g2-mfa-method-title::after {
15
- content: '——';
16
- color: #eeeeee;
17
- margin: 0 11px;
18
- }
19
-
20
- .g2-guard-mfa-methods-btn {
21
- border: none !important;
22
- background-color: #f5f6f7 !important;
23
- border-radius: 4px !important;
24
- color: #282d3c !important;
25
- font-size: 14px !important;
26
- height: 49px !important;
27
- margin-top: 8px !important;
28
- width: 100%;
29
-
30
- justify-content: center;
31
- align-items: center;
32
-
33
- font-size: 14px;
34
-
35
- .g2-icon {
36
- font-size: 16px;
37
- margin-right: 8px;
38
- }
39
- }
@@ -1,51 +0,0 @@
1
- import { getDefaultG2Config, IG2Config, IG2Events, IG2FCProps } from '../Type'
2
- import { AuthenticationClient, User } from '..'
3
-
4
- export interface MFAConfig extends IG2Config {}
5
-
6
- const defaultConfig: MFAConfig = {
7
- ...getDefaultG2Config(),
8
- }
9
-
10
- export const getDefaultMFAConfig = (): MFAConfig => ({
11
- ...getDefaultG2Config(),
12
- ...defaultConfig,
13
- })
14
-
15
- export interface MFAEvents extends IG2Events {
16
- onLogin?: (user: User, authClient: AuthenticationClient) => void
17
- }
18
-
19
- export enum MFAType {
20
- SMS = 'SMS',
21
- EMAIL = 'EMAIL',
22
- TOTP = 'OTP',
23
- FACE = 'FACE',
24
- }
25
-
26
- export interface GuardMFAInitData {
27
- mfaToken: string
28
- applicationMfa: {
29
- mfaPolicy: MFAType
30
- sort: number
31
- status: 0 | 1
32
- }[]
33
- faceMfaEnabled: boolean
34
- totpMfaEnabled: boolean
35
- email?: string
36
- phone?: string
37
- avatar?: string
38
- nickme?: string
39
- username?: string
40
- current?: MFAType
41
- }
42
-
43
- export interface GuardMFAProps extends IG2FCProps, MFAEvents {
44
- config: Partial<MFAConfig>
45
- initData: GuardMFAInitData
46
- }
47
-
48
- export interface GuardMFAViewProps extends GuardMFAProps {
49
- config: MFAConfig
50
- initData: GuardMFAInitData
51
- }