diff --git a/dashboard/src/components/EnvComponents/OAuthConfig.tsx b/dashboard/src/components/EnvComponents/OAuthConfig.tsx index 4536ade..4537997 100644 --- a/dashboard/src/components/EnvComponents/OAuthConfig.tsx +++ b/dashboard/src/components/EnvComponents/OAuthConfig.tsx @@ -108,7 +108,7 @@ const OAuthConfig = ({ fieldVisibility={fieldVisibility} setFieldVisibility={setFieldVisibility} inputType={HiddenInputType.GOOGLE_CLIENT_SECRET} - placeholder="Google Secret" + placeholder="Google Client Secret" /> @@ -146,7 +146,7 @@ const OAuthConfig = ({ fieldVisibility={fieldVisibility} setFieldVisibility={setFieldVisibility} inputType={HiddenInputType.GITHUB_CLIENT_SECRET} - placeholder="Github Secret" + placeholder="Github Client Secret" /> @@ -184,7 +184,7 @@ const OAuthConfig = ({ fieldVisibility={fieldVisibility} setFieldVisibility={setFieldVisibility} inputType={HiddenInputType.FACEBOOK_CLIENT_SECRET} - placeholder="Facebook Secret" + placeholder="Facebook Client Secret" /> @@ -260,7 +260,7 @@ const OAuthConfig = ({ fieldVisibility={fieldVisibility} setFieldVisibility={setFieldVisibility} inputType={HiddenInputType.APPLE_CLIENT_SECRET} - placeholder="Apple CLient Secret" + placeholder="Apple Client Secret" /> diff --git a/dashboard/src/graphql/queries/index.ts b/dashboard/src/graphql/queries/index.ts index ac9ba15..a4632c3 100644 --- a/dashboard/src/graphql/queries/index.ts +++ b/dashboard/src/graphql/queries/index.ts @@ -89,6 +89,7 @@ export const UserDetailsQuery = ` roles created_at revoked_timestamp + is_multi_factor_auth_enabled } } } diff --git a/dashboard/src/pages/Users.tsx b/dashboard/src/pages/Users.tsx index 6da5c83..c32a62d 100644 --- a/dashboard/src/pages/Users.tsx +++ b/dashboard/src/pages/Users.tsx @@ -68,6 +68,7 @@ interface userDataTypes { roles: [string]; created_at: number; revoked_timestamp: number; + is_multi_factor_auth_enabled?: boolean; } const enum updateAccessActions { @@ -250,6 +251,34 @@ export default function Users() { break; } }; + const multiFactorAuthUpdateHandler = async (user: userDataTypes) => { + const res = await client + .mutation(UpdateUser, { + params: { + id: user.id, + is_multi_factor_auth_enabled: !user.is_multi_factor_auth_enabled, + }, + }) + .toPromise(); + if (res.data?._update_user?.id) { + toast({ + title: `Multi factor authentication ${ + user.is_multi_factor_auth_enabled ? 'disabled' : 'enabled' + } for user`, + isClosable: true, + status: 'success', + position: 'bottom-right', + }); + updateUserList(); + return; + } + toast({ + title: 'Multi factor authentication update failed for user', + isClosable: true, + status: 'error', + position: 'bottom-right', + }); + }; return ( @@ -273,6 +302,7 @@ export default function Users() { Roles Verified Access + MFA Actions @@ -305,6 +335,19 @@ export default function Users() { {user.revoked_timestamp ? 'Revoked' : 'Enabled'} + + + {user.is_multi_factor_auth_enabled + ? 'Enabled' + : 'Disabled'} + + @@ -357,6 +400,19 @@ export default function Users() { Revoke Access )} + {user.is_multi_factor_auth_enabled ? ( + multiFactorAuthUpdateHandler(user)} + > + Disable MFA + + ) : ( + multiFactorAuthUpdateHandler(user)} + > + Enable MFA + + )} diff --git a/server/resolvers/update_profile.go b/server/resolvers/update_profile.go index d9c67b1..ac2947f 100644 --- a/server/resolvers/update_profile.go +++ b/server/resolvers/update_profile.go @@ -46,7 +46,7 @@ func UpdateProfileResolver(ctx context.Context, params model.UpdateProfileInput) } // validate if all params are not empty - if params.GivenName == nil && params.FamilyName == nil && params.Picture == nil && params.MiddleName == nil && params.Nickname == nil && params.OldPassword == nil && params.Email == nil && params.Birthdate == nil && params.Gender == nil && params.PhoneNumber == nil && params.NewPassword == nil && params.ConfirmNewPassword == nil { + if params.GivenName == nil && params.FamilyName == nil && params.Picture == nil && params.MiddleName == nil && params.Nickname == nil && params.OldPassword == nil && params.Email == nil && params.Birthdate == nil && params.Gender == nil && params.PhoneNumber == nil && params.NewPassword == nil && params.ConfirmNewPassword == nil && params.IsMultiFactorAuthEnabled == nil { log.Debug("All params are empty") return res, fmt.Errorf("please enter at least one param to update") } diff --git a/server/resolvers/update_user.go b/server/resolvers/update_user.go index 7cdf7bc..da9c58d 100644 --- a/server/resolvers/update_user.go +++ b/server/resolvers/update_user.go @@ -46,7 +46,7 @@ func UpdateUserResolver(ctx context.Context, params model.UpdateUserInput) (*mod "user_id": params.ID, }) - if params.GivenName == nil && params.FamilyName == nil && params.Picture == nil && params.MiddleName == nil && params.Nickname == nil && params.Email == nil && params.Birthdate == nil && params.Gender == nil && params.PhoneNumber == nil && params.Roles == nil { + if params.GivenName == nil && params.FamilyName == nil && params.Picture == nil && params.MiddleName == nil && params.Nickname == nil && params.Email == nil && params.Birthdate == nil && params.Gender == nil && params.PhoneNumber == nil && params.Roles == nil && params.IsMultiFactorAuthEnabled == nil { log.Debug("No params to update") return res, fmt.Errorf("please enter atleast one param to update") }