update pay function
This commit is contained in:
340
boilerplate-chakra-pro-main/utils/auth-helpers/server.ts
Normal file
340
boilerplate-chakra-pro-main/utils/auth-helpers/server.ts
Normal file
@@ -0,0 +1,340 @@
|
||||
'use server';
|
||||
|
||||
import { createClient } from '@/utils/supabase/server';
|
||||
import { cookies } from 'next/headers';
|
||||
import { redirect } from 'next/navigation';
|
||||
import { getURL, getErrorRedirect, getStatusRedirect } from '@/utils/helpers';
|
||||
import { getAuthTypes } from '@/utils/auth-helpers/settings';
|
||||
|
||||
function isValidEmail(email: string) {
|
||||
var regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;
|
||||
return regex.test(email);
|
||||
}
|
||||
|
||||
export async function redirectToPath(path: string) {
|
||||
return redirect(path);
|
||||
}
|
||||
|
||||
export async function SignOut(formData: FormData) {
|
||||
const pathName = String(formData.get('pathName')).trim();
|
||||
|
||||
const supabase = createClient();
|
||||
const { error } = await supabase.auth.signOut();
|
||||
|
||||
if (error) {
|
||||
return getErrorRedirect(
|
||||
pathName,
|
||||
'Hmm... Something went wrong.',
|
||||
'You could not be signed out.'
|
||||
);
|
||||
}
|
||||
|
||||
return '/dashboard/signin';
|
||||
}
|
||||
|
||||
export async function signInWithEmail(formData: FormData) {
|
||||
const cookieStore = cookies();
|
||||
const callbackURL = getURL('/auth/callback');
|
||||
|
||||
const email = String(formData.get('email')).trim();
|
||||
let redirectPath: string;
|
||||
|
||||
if (!isValidEmail(email)) {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/email_signin',
|
||||
'Invalid email address.',
|
||||
'Please try again.'
|
||||
);
|
||||
}
|
||||
|
||||
const supabase = createClient();
|
||||
let options = {
|
||||
emailRedirectTo: callbackURL,
|
||||
shouldCreateUser: true
|
||||
};
|
||||
|
||||
// If allowPassword is false, do not create a new user
|
||||
const { allowPassword } = getAuthTypes();
|
||||
if (allowPassword) options.shouldCreateUser = false;
|
||||
const { data, error } = await supabase.auth.signInWithOtp({
|
||||
email,
|
||||
options: options
|
||||
});
|
||||
|
||||
if (error) {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/email_signin',
|
||||
'You could not be signed in.',
|
||||
error.message
|
||||
);
|
||||
} else if (data) {
|
||||
cookieStore.set('preferredSignInView', 'email_signin', { path: '/' });
|
||||
redirectPath = getStatusRedirect(
|
||||
'/dashboard/signin/email_signin',
|
||||
'Success!',
|
||||
'Please check your email for a magic link. You may now close this tab.',
|
||||
true
|
||||
);
|
||||
} else {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/email_signin',
|
||||
'Hmm... Something went wrong.',
|
||||
'You could not be signed in.'
|
||||
);
|
||||
}
|
||||
|
||||
return redirectPath;
|
||||
}
|
||||
|
||||
export async function requestPasswordUpdate(formData: FormData) {
|
||||
const callbackURL = getURL('/auth/reset_password');
|
||||
|
||||
// Get form data
|
||||
const email = String(formData.get('email')).trim();
|
||||
let redirectPath: string;
|
||||
|
||||
if (!isValidEmail(email)) {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/forgot_password',
|
||||
'Invalid email address.',
|
||||
'Please try again.'
|
||||
);
|
||||
}
|
||||
|
||||
const supabase = createClient();
|
||||
|
||||
const { data, error } = await supabase.auth.resetPasswordForEmail(email, {
|
||||
redirectTo: callbackURL
|
||||
});
|
||||
|
||||
if (error) {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/forgot_password',
|
||||
error.message,
|
||||
'Please try again.'
|
||||
);
|
||||
} else if (data) {
|
||||
redirectPath = getStatusRedirect(
|
||||
'/dashboard/signin/forgot_password',
|
||||
'Success!',
|
||||
'Please check your email for a password reset link. You may now close this tab.',
|
||||
true
|
||||
);
|
||||
} else {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/forgot_password',
|
||||
'Hmm... Something went wrong.',
|
||||
'Password reset email could not be sent.'
|
||||
);
|
||||
}
|
||||
|
||||
return redirectPath;
|
||||
}
|
||||
|
||||
export async function signInWithPassword(formData: FormData) {
|
||||
const cookieStore = cookies();
|
||||
const email = String(formData.get('email')).trim();
|
||||
const password = String(formData.get('password')).trim();
|
||||
let redirectPath: string;
|
||||
|
||||
const supabase = createClient();
|
||||
const { error, data } = await supabase.auth.signInWithPassword({
|
||||
email,
|
||||
password
|
||||
});
|
||||
|
||||
if (error) {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/password_signin',
|
||||
'Sign in failed.',
|
||||
error.message
|
||||
);
|
||||
} else if (data.user) {
|
||||
cookieStore.set('preferredSignInView', 'password_signin', { path: '/' });
|
||||
redirectPath = getStatusRedirect('/', 'Success!', 'You are now signed in.');
|
||||
} else {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/password_signin',
|
||||
'Hmm... Something went wrong.',
|
||||
'You could not be signed in.'
|
||||
);
|
||||
}
|
||||
|
||||
return redirectPath;
|
||||
}
|
||||
|
||||
export async function signUp(formData: FormData) {
|
||||
const callbackURL = getURL('/auth/callback');
|
||||
|
||||
const email = String(formData.get('email')).trim();
|
||||
const password = String(formData.get('password')).trim();
|
||||
let redirectPath: string;
|
||||
|
||||
if (!isValidEmail(email)) {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/signup',
|
||||
'Invalid email address.',
|
||||
'Please try again.'
|
||||
);
|
||||
}
|
||||
|
||||
const supabase = createClient();
|
||||
const { error, data } = await supabase.auth.signUp({
|
||||
email,
|
||||
password,
|
||||
options: {
|
||||
emailRedirectTo: callbackURL
|
||||
}
|
||||
});
|
||||
|
||||
if (error) {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/signup',
|
||||
'Sign up failed.',
|
||||
error.message
|
||||
);
|
||||
} else if (data.session) {
|
||||
redirectPath = getStatusRedirect('/', 'Success!', 'You are now signed in.');
|
||||
} else if (
|
||||
data.user &&
|
||||
data.user.identities &&
|
||||
data.user.identities.length == 0
|
||||
) {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/signup',
|
||||
'Sign up failed.',
|
||||
'There is already an account associated with this email address. Try resetting your password.'
|
||||
);
|
||||
} else if (data.user) {
|
||||
redirectPath = getStatusRedirect(
|
||||
'/',
|
||||
'Success!',
|
||||
'Please check your email for a confirmation link. You may now close this tab.'
|
||||
);
|
||||
} else {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/signup',
|
||||
'Hmm... Something went wrong.',
|
||||
'You could not be signed up.'
|
||||
);
|
||||
}
|
||||
|
||||
return redirectPath;
|
||||
}
|
||||
|
||||
export async function updatePassword(formData: FormData) {
|
||||
const password = String(formData.get('password')).trim();
|
||||
const passwordConfirm = String(formData.get('passwordConfirm')).trim();
|
||||
let redirectPath: string;
|
||||
|
||||
// Check that the password and confirmation match
|
||||
if (password !== passwordConfirm) {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/update_password',
|
||||
'Your password could not be updated.',
|
||||
'Passwords do not match.'
|
||||
);
|
||||
}
|
||||
|
||||
const supabase = createClient();
|
||||
const { error, data } = await supabase.auth.updateUser({
|
||||
password
|
||||
});
|
||||
|
||||
if (error) {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/update_password',
|
||||
'Your password could not be updated.',
|
||||
error.message
|
||||
);
|
||||
} else if (data.user) {
|
||||
redirectPath = getStatusRedirect(
|
||||
'/',
|
||||
'Success!',
|
||||
'Your password has been updated.'
|
||||
);
|
||||
} else {
|
||||
redirectPath = getErrorRedirect(
|
||||
'/dashboard/signin/update_password',
|
||||
'Hmm... Something went wrong.',
|
||||
'Your password could not be updated.'
|
||||
);
|
||||
}
|
||||
|
||||
return redirectPath;
|
||||
}
|
||||
|
||||
export async function updateEmail(formData: FormData) {
|
||||
// Get form data
|
||||
const newEmail = String(formData.get('newEmail')).trim();
|
||||
|
||||
// Check that the email is valid
|
||||
if (!isValidEmail(newEmail)) {
|
||||
return getErrorRedirect(
|
||||
'/dashboard/settings',
|
||||
'Your email could not be updated.',
|
||||
'Invalid email address.'
|
||||
);
|
||||
}
|
||||
|
||||
const supabase = createClient();
|
||||
|
||||
const callbackUrl = getURL(
|
||||
getStatusRedirect(
|
||||
'/dashboard/settings',
|
||||
'Success!',
|
||||
`Your email has been updated.`
|
||||
)
|
||||
);
|
||||
|
||||
const { error } = await supabase.auth.updateUser(
|
||||
{ email: newEmail },
|
||||
{
|
||||
emailRedirectTo: callbackUrl
|
||||
}
|
||||
);
|
||||
|
||||
if (error) {
|
||||
return getErrorRedirect(
|
||||
'/dashboard/settings',
|
||||
'Your email could not be updated.',
|
||||
error.message
|
||||
);
|
||||
} else {
|
||||
return getStatusRedirect(
|
||||
'/dashboard/settings',
|
||||
'Confirmation emails sent.',
|
||||
`You will need to confirm the update by clicking the links sent to both the old and new email addresses.`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export async function updateName(formData: FormData) {
|
||||
// Get form data
|
||||
const fullName = String(formData.get('fullName')).trim();
|
||||
|
||||
const supabase = createClient();
|
||||
const { error, data } = await supabase.auth.updateUser({
|
||||
data: { full_name: fullName }
|
||||
});
|
||||
|
||||
if (error) {
|
||||
return getErrorRedirect(
|
||||
'/dashboard/settings',
|
||||
'Your name could not be updated.',
|
||||
error.message
|
||||
);
|
||||
} else if (data.user) {
|
||||
return getStatusRedirect(
|
||||
'/dashboard/settings',
|
||||
'Success!',
|
||||
'Your name has been updated.'
|
||||
);
|
||||
} else {
|
||||
return getErrorRedirect(
|
||||
'/dashboard/settings',
|
||||
'Hmm... Something went wrong.',
|
||||
'Your name could not be updated.'
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user