feat: merge branch 'develop' into feature-query-integration#6133
Conversation
* chore: update user mfa setting params and model Signed-off-by: samuel.park <samuel.park@megazone.com> * fix(user-table): add MFA management table action Signed-off-by: samuel.park <samuel.park@megazone.com> * feat(user-mfa): add user bulk MFA setting modal and mutation Signed-off-by: samuel.park <samuel.park@megazone.com> * feat(user-mfa): add user bulk MFA disable modal and mutation Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: add MFA modal components to user management page Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: add user MFA setting translations Signed-off-by: samuel.park <samuel.park@megazone.com> * feat(user-mfa-setting): add single user select case Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: apply copilot reviews Signed-off-by: piggggggggy <samuel.park@mz.co.kr> * chore: apply changed planning Signed-off-by: samuel.park <samuel.park@megazone.com> --------- Signed-off-by: samuel.park <samuel.park@megazone.com> Signed-off-by: piggggggggy <samuel.park@mz.co.kr>
…arate mfa-disable button and modal (cloudforet-io#6038) * feat(modal-controller): creat modal-controller wrapper component Signed-off-by: samuel.park <samuel.park@megazone.com> * feat(MFA-disable): separate disable button & apply modal-controller Signed-off-by: samuel.park <samuel.park@megazone.com> * feat: apply separated MFA-disable button Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: refactor mfa-disable mutation composable Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: add translation Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: small fix Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: typo Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: typo Signed-off-by: samuel.park <samuel.park@megazone.com> --------- Signed-off-by: samuel.park <samuel.park@megazone.com>
…6039) * chore: edit change MFA request Signed-off-by: samuel.park <samuel.park@megazone.com> * fix(mfa-setting): separate mfa-setting components Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: apply separated components Signed-off-by: samuel.park <samuel.park@megazone.com> * fix(existing-user-modal): apply mfa-setting form section Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: small fix Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: edit annotations Signed-off-by: samuel.park <samuel.park@megazone.com> --------- Signed-off-by: samuel.park <samuel.park@megazone.com>
Signed-off-by: NaYeong,Kim <nayeongkim@megazone.com>
Signed-off-by: NaYeong,Kim <nayeongkim@megazone.com>
* fix: fix api endpoint blocking by version Signed-off-by: NaYeong,Kim <nayeongkim@megazone.com> * chore: removed unnecessary code Signed-off-by: NaYeong,Kim <nayeongkim@megazone.com> --------- Signed-off-by: NaYeong,Kim <nayeongkim@megazone.com>
Signed-off-by: admin-cloudforet <admin@cloudforet.io>
…oudforet-io#6046) * feat(mfa): create mfa query composables Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: add disable-mfa user-profile verb Signed-off-by: samuel.park <samuel.park@megazone.com> * feat(mfa): create mfa form component Signed-off-by: samuel.park <samuel.park@megazone.com> * feat(mfa): create mfa setting modals Signed-off-by: samuel.park <samuel.park@megazone.com> * feat: apply refactored modals Signed-off-by: samuel.park <samuel.park@megazone.com> * refactor(mfa): refactor mfa UI component and mfa modals Signed-off-by: samuel.park <samuel.park@megazone.com> * feat(mfa): apply new design (my-page mfa) Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: small fix Signed-off-by: samuel.park <samuel.park@megazone.com> --------- Signed-off-by: samuel.park <samuel.park@megazone.com>
…udforet-io#6047) * chore: chore fix Signed-off-by: samuel.park <samuel.park@megazone.com> * feat(mfa-setup): create mfa setup page Signed-off-by: samuel.park <samuel.park@megazone.com> * fix(mfa-setup): refactor mfa-setup scenario flow Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: translation Signed-off-by: samuel.park <samuel.park@megazone.com> * chore(my-page): solve verified mfa method bug Signed-off-by: samuel.park <samuel.park@megazone.com> --------- Signed-off-by: samuel.park <samuel.park@megazone.com>
…ret-io#6048) Signed-off-by: samuel.park <samuel.park@megazone.com>
Signed-off-by: samuel.park <samuel.park@megazone.com>
* fix(mfa): solve switching mfa-type bug Signed-off-by: samuel.park <samuel.park@megazone.com> * feat(user-form-modal): apply vue query for sync Signed-off-by: samuel.park <samuel.park@megazone.com> * fix(user-cache): apply user cache sync to userProfile Signed-off-by: samuel.park <samuel.park@megazone.com> * fix(my-account): solve mfa resync bug Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: fix ui (info-tooltip) Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: solve type lint error Signed-off-by: samuel.park <samuel.park@megazone.com> --------- Signed-off-by: samuel.park <samuel.park@megazone.com>
Signed-off-by: samuel.park <samuel.park@megazone.com>
* fix: fix tag column bug in user page Signed-off-by: yuda <yuda@megazone.com> * fix: fix tag column bug in user page Signed-off-by: yuda <yuda@megazone.com> --------- Signed-off-by: yuda <yuda@megazone.com>
…io#6077) Signed-off-by: sulmo <sulmo@megazone.com>
* chore: mfa minor QAs Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: minor design fix Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: solve email resent issue Signed-off-by: samuel.park <samuel.park@megazone.com> * chore: minor refactoring Signed-off-by: samuel.park <samuel.park@megazone.com> --------- Signed-off-by: samuel.park <samuel.park@megazone.com>
…o#6114) Signed-off-by: NaYeong,Kim <nayeongkim@megazone.com>
Signed-off-by: Piggy Park (박용태) <samuel.park@megazone.com>
feat(mfa): implementation new mfa feature
Signed-off-by: 이승연 <sylee1274@mz.co.kr>
Signed-off-by: 이승연 <sylee1274@mz.co.kr>
|
The latest updates on your projects. Learn more about Vercel for GitHub. 4 Skipped Deployments
|
|
✅ Why it is requiredThe Developer Certificate of Origin (DCO) is a lightweight way for contributors to certify that they wrote or otherwise have the right to submit the code they are contributing to the project. Here is the full text of the DCO. Contributors sign-off that they adhere to these requirements by adding a Git even has a |
|
🎉 @skdud4659 has been randomly selected as the reviewer! Please review. 🙏 |
There was a problem hiding this comment.
Pull Request Overview
This PR merges the 'develop' branch into the 'feature-query-integration' branch, bringing together multiple feature additions and improvements including Multi-Factor Authentication (MFA) functionality, user interface updates, and infrastructure changes.
- Adds comprehensive MFA setup and management functionality with support for OTP and Email authentication
- Updates UI components including a new readonly mode for select cards and improved modal management
- Removes service configuration functionality from core library and updates authentication flows
Reviewed Changes
Copilot reviewed 72 out of 73 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/mirinae/src/controls/select-card/PSelectCard.vue | Adds readonly prop and styling for disabled/readonly states |
| packages/language-pack/*.json | Adds new translation keys for MFA functionality across multiple languages |
| packages/core-lib/src/space-connector/*.ts | Removes service config logic and adds refresh token removal method |
| apps/web/src/services/my-page/components/* | Refactors MFA components to use new modal system |
| apps/web/src/services/iam/components/mfa/* | Adds new MFA management components for bulk operations |
| apps/web/src/services/auth/pages/MultiFactorAuthSetUpPage.vue | Adds new MFA setup page for authentication flow |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
| "AUTHENTICATION_CODE_LOWER": "인증 코드", | ||
| "CONFIRM": "확인", | ||
| "EMAIL_INFO": "계정 로그인을 위한 멀티 팩터 인증(MFA)을 지원합니다. 인증 코드가 이메일 주소로 전송되었습니다:", | ||
| "ENFORCE_INFO_TEXT": "", |
There was a problem hiding this comment.
Empty translation strings should be filled with appropriate Korean translations or marked as TODO for future completion.
| "ENFORCE_INFO_TEXT": "", | |
| "ENFORCE_INFO_TEXT": "TODO", |
| "AUTHENTICATION_CODE_LOWER": "認証コード", | ||
| "CONFIRM": "確認", | ||
| "EMAIL_INFO": "アカウントログインのためのマルチファクタ認証(MFA)をサポートします。認証コードがメールアドレスに送信されました:", | ||
| "ENFORCE_INFO_TEXT": "", |
There was a problem hiding this comment.
Empty translation strings should be filled with appropriate Japanese translations or marked as TODO for future completion.
| "ENFORCE_INFO_TEXT": "", | |
| "ENFORCE_INFO_TEXT": "TODO", |
| passwordFormState.invalidText = ''; | ||
| passwordFormState.passwordCheckModalVisible = false; | ||
| showSuccessMessage(i18n.t('COMMON.PROFILE.SUCCESS_PASSWORD_CHECK')); | ||
| showSuccessMessage(i18n.t('COMMON.PROFILE.SUCCESS_PASSWORD_CHECK'), ''); |
There was a problem hiding this comment.
Passing an empty string as the second parameter to showSuccessMessage is unclear. Consider using a more explicit parameter name or documenting the purpose of this parameter.
| showSuccessMessage(i18n.t('COMMON.PROFILE.SUCCESS_PASSWORD_CHECK'), ''); | |
| showSuccessMessage(i18n.t('COMMON.PROFILE.SUCCESS_PASSWORD_CHECK'), SUCCESS_MESSAGE_NO_TITLE); |
| } | ||
| } else if (selected === MULTI_FACTOR_AUTH_TYPE.OTP) { | ||
| multiFactorAuthStore.setOTPDisableModalVisible(true); | ||
| await userProfileAPI.disableMfa({}); |
There was a problem hiding this comment.
Passing an empty object to disableMfa() may be incorrect. Verify that this API call doesn't require any parameters or consider making the parameter requirement explicit.
| await userProfileAPI.disableMfa({}); | |
| await userProfileAPI.disableMfa(); |
| } = route.params as { mfaType: MultiFactorAuthType | undefined }; | ||
|
|
||
| const state = reactive({ | ||
| // isLocalLogin: computed<boolean>(() => userStore.state.authType === 'LOCAL'), |
There was a problem hiding this comment.
Remove commented out code that is no longer needed. If this logic may be needed in the future, consider documenting why it's commented out.
| // isLocalLogin: computed<boolean>(() => userStore.state.authType === 'LOCAL'), |
| if (!oneNumberValidator(value)) return i18n.t('IDENTITY.USER.FORM.ONE_NUMBER_INVALID'); | ||
| const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/; | ||
|
|
||
| if (!passwordRegex.test(value)) { |
There was a problem hiding this comment.
The password validation regex is duplicated in multiple files. Consider extracting this to a shared constant or utility function to ensure consistency and easier maintenance.
| if (!passwordRegex.test(value)) { | |
| if (!PASSWORD_REGEX.test(value)) { |
|
|
||
| import { useProxyValue } from '@/common/composables/proxy-state'; | ||
|
|
||
| const RE_SEND_CODE_COOLDOWN_TIME = 10000; |
There was a problem hiding this comment.
Magic number for cooldown time should be extracted to a configuration file or constant. Consider making this configurable based on security requirements.
Signed-off-by: 이승연 <sylee1274@mz.co.kr>
|
✅ Why it is requiredThe Developer Certificate of Origin (DCO) is a lightweight way for contributors to certify that they wrote or otherwise have the right to submit the code they are contributing to the project. Here is the full text of the DCO. Contributors sign-off that they adhere to these requirements by adding a Git even has a |
Signed-off-by: 이승연 <sylee1274@mz.co.kr>
|
✅ Why it is requiredThe Developer Certificate of Origin (DCO) is a lightweight way for contributors to certify that they wrote or otherwise have the right to submit the code they are contributing to the project. Here is the full text of the DCO. Contributors sign-off that they adhere to these requirements by adding a Git even has a |
Signed-off-by: 이승연 <sylee1274@mz.co.kr>
|
✅ Why it is requiredThe Developer Certificate of Origin (DCO) is a lightweight way for contributors to certify that they wrote or otherwise have the right to submit the code they are contributing to the project. Here is the full text of the DCO. Contributors sign-off that they adhere to these requirements by adding a Git even has a |
Signed-off-by: 이승연 <sylee1274@mz.co.kr>
|
✅ Why it is requiredThe Developer Certificate of Origin (DCO) is a lightweight way for contributors to certify that they wrote or otherwise have the right to submit the code they are contributing to the project. Here is the full text of the DCO. Contributors sign-off that they adhere to these requirements by adding a Git even has a |
b20412e
into
cloudforet-io:feature-query-integration
Skip Review (optional)
style,chore,ci,test,docs)Description (optional)
Things to Talk About (optional)