File size: 3,731 Bytes
67c7241
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
"use server";

import { createClient } from "@/lib/supabase/server";
import { redirect } from "next/navigation";

export async function signIn(prevState: any, formData: FormData) {
  const email = formData.get("email") as string;
  const password = formData.get("password") as string;
  const returnUrl = formData.get("returnUrl") as string | undefined;
  
  if (!email || !email.includes('@')) {
    return { message: "Please enter a valid email address" };
  }
  
  if (!password || password.length < 6) {
    return { message: "Password must be at least 6 characters" };
  }

  const supabase = await createClient();

  const { error } = await supabase.auth.signInWithPassword({
    email,
    password
  });

  if (error) {
    return { message: error.message || "Could not authenticate user" };
  }

  return redirect(returnUrl || "/dashboard");
}

export async function signUp(prevState: any, formData: FormData) {
  const origin = formData.get("origin") as string;
  const email = formData.get("email") as string;
  const password = formData.get("password") as string;
  const confirmPassword = formData.get("confirmPassword") as string;
  const returnUrl = formData.get("returnUrl") as string | undefined;
  
  if (!email || !email.includes('@')) {
    return { message: "Please enter a valid email address" };
  }
  
  if (!password || password.length < 6) {
    return { message: "Password must be at least 6 characters" };
  }

  if (password !== confirmPassword) {
    return { message: "Passwords do not match" };
  }

  const supabase = await createClient();

  const { error } = await supabase.auth.signUp({
    email,
    password,
    options: {
      emailRedirectTo: `${origin}/auth/callback?returnUrl=${returnUrl}`,
    },
  });

  if (error) {
    return { message: error.message || "Could not create account" };
  }

  // Try to sign in immediately
  const { error: signInError } = await supabase.auth.signInWithPassword({
    email,
    password
  });

  if (signInError) {
    return { message: "Account created! Check your email to confirm your registration." };
  }

  return redirect(returnUrl || "/dashboard");
}

export async function forgotPassword(prevState: any, formData: FormData) {
  const email = formData.get("email") as string;
  const origin = formData.get("origin") as string;
  
  if (!email || !email.includes('@')) {
    return { message: "Please enter a valid email address" };
  }

  const supabase = await createClient();

  const { error } = await supabase.auth.resetPasswordForEmail(email, {
    redirectTo: `${origin}/auth/reset-password`,
  });

  if (error) {
    return { message: error.message || "Could not send password reset email" };
  }

  return { 
    success: true, 
    message: "Check your email for a password reset link" 
  };
}

export async function resetPassword(prevState: any, formData: FormData) {
  const password = formData.get("password") as string;
  const confirmPassword = formData.get("confirmPassword") as string;
  
  if (!password || password.length < 6) {
    return { message: "Password must be at least 6 characters" };
  }

  if (password !== confirmPassword) {
    return { message: "Passwords do not match" };
  }

  const supabase = await createClient();

  const { error } = await supabase.auth.updateUser({
    password
  });

  if (error) {
    return { message: error.message || "Could not update password" };
  }

  return { 
    success: true, 
    message: "Password updated successfully" 
  };
}

export async function signOut() {
  const supabase = await createClient();
  const { error } = await supabase.auth.signOut();
  
  if (error) {
    return { message: error.message || "Could not sign out" };
  }

  return redirect("/");
}