sitepaige-mcp-server 1.0.2 → 1.0.3
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.
- package/components/login.tsx +83 -7
- package/defaultapp/api/Auth/resend-verification/route.ts +130 -0
- package/defaultapp/api/Auth/route.ts +0 -10
- package/defaultapp/api/Auth/signup/route.ts +5 -15
- package/defaultapp/api/Auth/verify-email/route.ts +8 -1
- package/defaultapp/db-password-auth.ts +37 -0
- package/defaultapp/db-users.ts +11 -11
- package/defaultapp/middleware.ts +15 -17
- package/dist/components/login.tsx +83 -7
- package/dist/defaultapp/api/Auth/resend-verification/route.ts +130 -0
- package/dist/defaultapp/api/Auth/route.ts +0 -10
- package/dist/defaultapp/api/Auth/signup/route.ts +5 -15
- package/dist/defaultapp/api/Auth/verify-email/route.ts +8 -1
- package/dist/defaultapp/db-password-auth.ts +37 -0
- package/dist/defaultapp/db-users.ts +11 -11
- package/dist/defaultapp/middleware.ts +15 -17
- package/dist/generators/views.js +13 -13
- package/dist/generators/views.js.map +1 -1
- package/package.json +1 -1
package/components/login.tsx
CHANGED
|
@@ -20,6 +20,8 @@ export default function Login({ providers }: LoginProps) {
|
|
|
20
20
|
const [confirmPassword, setConfirmPassword] = useState('');
|
|
21
21
|
const [isLoading, setIsLoading] = useState(false);
|
|
22
22
|
const [message, setMessage] = useState<{ type: 'success' | 'error'; text: string } | null>(null);
|
|
23
|
+
const [showResendVerification, setShowResendVerification] = useState(false);
|
|
24
|
+
const [resendEmail, setResendEmail] = useState('');
|
|
23
25
|
|
|
24
26
|
|
|
25
27
|
const handleProviderLogin = async (provider: string) => {
|
|
@@ -49,6 +51,36 @@ export default function Login({ providers }: LoginProps) {
|
|
|
49
51
|
|
|
50
52
|
};
|
|
51
53
|
|
|
54
|
+
const handleResendVerification = async () => {
|
|
55
|
+
setError(null);
|
|
56
|
+
setMessage(null);
|
|
57
|
+
setIsLoading(true);
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
const response = await fetch('/api/Auth/resend-verification', {
|
|
61
|
+
method: 'POST',
|
|
62
|
+
headers: {
|
|
63
|
+
'Content-Type': 'application/json'
|
|
64
|
+
},
|
|
65
|
+
body: JSON.stringify({ email: resendEmail || email })
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const data = await response.json();
|
|
69
|
+
|
|
70
|
+
if (response.ok && data.success) {
|
|
71
|
+
setMessage({ type: 'success', text: data.message || 'Verification email sent! Please check your inbox.' });
|
|
72
|
+
setShowResendVerification(false);
|
|
73
|
+
setResendEmail('');
|
|
74
|
+
} else {
|
|
75
|
+
setError(data.error || 'Failed to send verification email');
|
|
76
|
+
}
|
|
77
|
+
} catch (err) {
|
|
78
|
+
setError('An unexpected error occurred');
|
|
79
|
+
} finally {
|
|
80
|
+
setIsLoading(false);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
52
84
|
const handleUsernamePasswordAuth = async (e: React.FormEvent) => {
|
|
53
85
|
e.preventDefault();
|
|
54
86
|
setError(null);
|
|
@@ -66,7 +98,9 @@ export default function Login({ providers }: LoginProps) {
|
|
|
66
98
|
|
|
67
99
|
const response = await fetch('/api/Auth/signup', {
|
|
68
100
|
method: 'POST',
|
|
69
|
-
headers: {
|
|
101
|
+
headers: {
|
|
102
|
+
'Content-Type': 'application/json'
|
|
103
|
+
},
|
|
70
104
|
body: JSON.stringify({ email, password })
|
|
71
105
|
});
|
|
72
106
|
|
|
@@ -84,7 +118,9 @@ export default function Login({ providers }: LoginProps) {
|
|
|
84
118
|
// Handle login
|
|
85
119
|
const response = await fetch('/api/Auth', {
|
|
86
120
|
method: 'POST',
|
|
87
|
-
headers: {
|
|
121
|
+
headers: {
|
|
122
|
+
'Content-Type': 'application/json'
|
|
123
|
+
},
|
|
88
124
|
body: JSON.stringify({ email, password, provider: 'username' })
|
|
89
125
|
});
|
|
90
126
|
|
|
@@ -95,6 +131,11 @@ export default function Login({ providers }: LoginProps) {
|
|
|
95
131
|
window.location.href = '/';
|
|
96
132
|
} else {
|
|
97
133
|
setError(data.error || 'Login failed');
|
|
134
|
+
// Check if error is about email verification
|
|
135
|
+
if (response.status === 403 || data.error?.toLowerCase().includes('verify')) {
|
|
136
|
+
setShowResendVerification(true);
|
|
137
|
+
setResendEmail(email);
|
|
138
|
+
}
|
|
98
139
|
}
|
|
99
140
|
}
|
|
100
141
|
} catch (err) {
|
|
@@ -179,17 +220,18 @@ export default function Login({ providers }: LoginProps) {
|
|
|
179
220
|
</div>
|
|
180
221
|
|
|
181
222
|
<div className="text-center">
|
|
182
|
-
<
|
|
183
|
-
|
|
184
|
-
onClick={() => {
|
|
223
|
+
<a
|
|
224
|
+
href="#"
|
|
225
|
+
onClick={(e) => {
|
|
226
|
+
e.preventDefault();
|
|
185
227
|
setIsSignup(!isSignup);
|
|
186
228
|
setError(null);
|
|
187
229
|
setMessage(null);
|
|
188
230
|
}}
|
|
189
|
-
className="text-sm text-indigo-600 hover:text-indigo-500"
|
|
231
|
+
className="text-sm text-indigo-600 hover:text-indigo-500 underline"
|
|
190
232
|
>
|
|
191
233
|
{isSignup ? 'Already have an account? Sign in' : "Don't have an account? Sign up"}
|
|
192
|
-
</
|
|
234
|
+
</a>
|
|
193
235
|
</div>
|
|
194
236
|
</form>
|
|
195
237
|
)}
|
|
@@ -234,6 +276,40 @@ export default function Login({ providers }: LoginProps) {
|
|
|
234
276
|
{error}
|
|
235
277
|
</div>
|
|
236
278
|
)}
|
|
279
|
+
|
|
280
|
+
{showResendVerification && (
|
|
281
|
+
<div className="mt-4 p-4 border border-gray-200 rounded-md bg-gray-50">
|
|
282
|
+
<p className="text-sm text-gray-700 mb-3">
|
|
283
|
+
Need a new verification email? Enter your email address and we'll send you a new link.
|
|
284
|
+
</p>
|
|
285
|
+
<div className="space-y-3">
|
|
286
|
+
<input
|
|
287
|
+
type="email"
|
|
288
|
+
value={resendEmail}
|
|
289
|
+
onChange={(e) => setResendEmail(e.target.value)}
|
|
290
|
+
placeholder="Email address"
|
|
291
|
+
className="block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 text-sm"
|
|
292
|
+
/>
|
|
293
|
+
<button
|
|
294
|
+
onClick={handleResendVerification}
|
|
295
|
+
disabled={isLoading || !resendEmail}
|
|
296
|
+
className="w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 disabled:opacity-50"
|
|
297
|
+
>
|
|
298
|
+
{isLoading ? 'Sending...' : 'Resend Verification Email'}
|
|
299
|
+
</button>
|
|
300
|
+
<button
|
|
301
|
+
type="button"
|
|
302
|
+
onClick={() => {
|
|
303
|
+
setShowResendVerification(false);
|
|
304
|
+
setResendEmail('');
|
|
305
|
+
}}
|
|
306
|
+
className="w-full text-sm text-gray-500 hover:text-gray-700 bg-transparent border-0 p-0 underline"
|
|
307
|
+
>
|
|
308
|
+
Cancel
|
|
309
|
+
</button>
|
|
310
|
+
</div>
|
|
311
|
+
</div>
|
|
312
|
+
)}
|
|
237
313
|
</div>
|
|
238
314
|
</div>
|
|
239
315
|
);
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Resend verification email endpoint
|
|
3
|
+
* Allows users to request a new verification email
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { NextResponse } from 'next/server';
|
|
7
|
+
import { regenerateVerificationToken } from '../../../db-password-auth';
|
|
8
|
+
import { send_email } from '../../../storage/email';
|
|
9
|
+
|
|
10
|
+
// Email validation regex
|
|
11
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
12
|
+
|
|
13
|
+
export async function POST(request: Request) {
|
|
14
|
+
try {
|
|
15
|
+
const { email } = await request.json();
|
|
16
|
+
|
|
17
|
+
// Validate email format
|
|
18
|
+
if (!email || !emailRegex.test(email)) {
|
|
19
|
+
return NextResponse.json(
|
|
20
|
+
{ error: 'Invalid email address' },
|
|
21
|
+
{ status: 400 }
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Regenerate verification token
|
|
26
|
+
const result = await regenerateVerificationToken(email);
|
|
27
|
+
|
|
28
|
+
if (!result) {
|
|
29
|
+
// Don't reveal whether the email exists or not
|
|
30
|
+
return NextResponse.json({
|
|
31
|
+
success: true,
|
|
32
|
+
message: 'If an unverified account exists with this email, a verification email has been sent.'
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const { verificationToken } = result;
|
|
37
|
+
|
|
38
|
+
// Get site domain from environment or default
|
|
39
|
+
const siteDomain = process.env.SITE_DOMAIN || 'https://sitepaige.com';
|
|
40
|
+
const verificationUrl = `${siteDomain}/api/Auth/verify-email?token=${verificationToken}`;
|
|
41
|
+
|
|
42
|
+
// Send verification email
|
|
43
|
+
try {
|
|
44
|
+
const emailHtml = `
|
|
45
|
+
<!DOCTYPE html>
|
|
46
|
+
<html>
|
|
47
|
+
<head>
|
|
48
|
+
<style>
|
|
49
|
+
body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
|
|
50
|
+
.container { max-width: 600px; margin: 0 auto; padding: 20px; }
|
|
51
|
+
.button {
|
|
52
|
+
display: inline-block;
|
|
53
|
+
padding: 12px 24px;
|
|
54
|
+
background-color: #f0f0f0;
|
|
55
|
+
color: #000000;
|
|
56
|
+
text-decoration: none;
|
|
57
|
+
border: 1px solid #cccccc;
|
|
58
|
+
border-radius: 4px;
|
|
59
|
+
}
|
|
60
|
+
.footer { margin-top: 30px; font-size: 12px; color: #666; }
|
|
61
|
+
</style>
|
|
62
|
+
</head>
|
|
63
|
+
<body>
|
|
64
|
+
<div class="container">
|
|
65
|
+
<h2>Verify Your Email Address</h2>
|
|
66
|
+
<p>You requested a new verification email for your account at ${siteDomain}. Please verify your email address by clicking the button below:</p>
|
|
67
|
+
<p style="margin: 30px 0;">
|
|
68
|
+
<a href="${verificationUrl}" class="button">Verify Email Address</a>
|
|
69
|
+
</p>
|
|
70
|
+
<p>Or copy and paste this link into your browser:</p>
|
|
71
|
+
<p style="word-break: break-all; color: #0066cc;">${verificationUrl}</p>
|
|
72
|
+
<p>This link will expire in 24 hours.</p>
|
|
73
|
+
<div class="footer">
|
|
74
|
+
<p>If you didn't request this email, you can safely ignore it.</p>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</body>
|
|
78
|
+
</html>
|
|
79
|
+
`;
|
|
80
|
+
|
|
81
|
+
const emailText = `
|
|
82
|
+
Verify Your Email Address
|
|
83
|
+
|
|
84
|
+
You requested a new verification email for your account at ${siteDomain}. Please verify your email address by clicking the link below:
|
|
85
|
+
|
|
86
|
+
${verificationUrl}
|
|
87
|
+
|
|
88
|
+
This link will expire in 24 hours.
|
|
89
|
+
|
|
90
|
+
If you didn't request this email, you can safely ignore it.
|
|
91
|
+
`;
|
|
92
|
+
|
|
93
|
+
await send_email({
|
|
94
|
+
to: email,
|
|
95
|
+
from: process.env.EMAIL_FROM || 'noreply@sitepaige.com',
|
|
96
|
+
subject: 'Verify your email address',
|
|
97
|
+
html: emailHtml,
|
|
98
|
+
text: emailText
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
return NextResponse.json({
|
|
102
|
+
success: true,
|
|
103
|
+
message: 'Verification email sent successfully! Please check your email.'
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
} catch (emailError) {
|
|
107
|
+
console.error('Failed to send verification email:', emailError);
|
|
108
|
+
return NextResponse.json({
|
|
109
|
+
success: false,
|
|
110
|
+
error: 'Failed to send verification email. Please try again later.'
|
|
111
|
+
}, { status: 500 });
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
} catch (error: any) {
|
|
115
|
+
console.error('Resend verification error:', error);
|
|
116
|
+
|
|
117
|
+
if (error.message === 'Email is already verified') {
|
|
118
|
+
return NextResponse.json(
|
|
119
|
+
{ error: 'This email is already verified. Please sign in.' },
|
|
120
|
+
{ status: 400 }
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Generic response to avoid revealing whether email exists
|
|
125
|
+
return NextResponse.json({
|
|
126
|
+
success: true,
|
|
127
|
+
message: 'If an unverified account exists with this email, a verification email has been sent.'
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -10,7 +10,6 @@ import * as crypto from 'node:crypto';
|
|
|
10
10
|
|
|
11
11
|
import { db_init, db_query } from '../../db';
|
|
12
12
|
import { upsertUser, storeOAuthToken, validateSession, rotateSession } from '../../db-users';
|
|
13
|
-
import { validateCsrfToken } from '../../csrf';
|
|
14
13
|
|
|
15
14
|
type OAuthProvider = 'google' | 'facebook' | 'apple' | 'github';
|
|
16
15
|
|
|
@@ -395,15 +394,6 @@ export async function GET() {
|
|
|
395
394
|
}
|
|
396
395
|
|
|
397
396
|
export async function DELETE(request: Request) {
|
|
398
|
-
// Validate CSRF token for logout
|
|
399
|
-
const isValidCsrf = await validateCsrfToken(request);
|
|
400
|
-
if (!isValidCsrf) {
|
|
401
|
-
return NextResponse.json(
|
|
402
|
-
{ error: 'Invalid CSRF token' },
|
|
403
|
-
{ status: 403 }
|
|
404
|
-
);
|
|
405
|
-
}
|
|
406
|
-
|
|
407
397
|
const db = await db_init();
|
|
408
398
|
|
|
409
399
|
try {
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { NextResponse } from 'next/server';
|
|
7
|
-
import { validateCsrfToken } from '../../../csrf';
|
|
8
7
|
import { createPasswordAuth } from '../../../db-password-auth';
|
|
9
8
|
import { send_email } from '../../../storage/email';
|
|
10
9
|
|
|
@@ -15,15 +14,6 @@ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
|
15
14
|
const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/;
|
|
16
15
|
|
|
17
16
|
export async function POST(request: Request) {
|
|
18
|
-
// Validate CSRF token
|
|
19
|
-
const isValidCsrf = await validateCsrfToken(request);
|
|
20
|
-
if (!isValidCsrf) {
|
|
21
|
-
return NextResponse.json(
|
|
22
|
-
{ error: 'Invalid CSRF token' },
|
|
23
|
-
{ status: 403 }
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
17
|
try {
|
|
28
18
|
const { email, password } = await request.json();
|
|
29
19
|
|
|
@@ -62,11 +52,11 @@ export async function POST(request: Request) {
|
|
|
62
52
|
.button {
|
|
63
53
|
display: inline-block;
|
|
64
54
|
padding: 12px 24px;
|
|
65
|
-
background-color: #
|
|
66
|
-
color:
|
|
55
|
+
background-color: #f0f0f0;
|
|
56
|
+
color: #000000;
|
|
67
57
|
text-decoration: none;
|
|
68
|
-
border
|
|
69
|
-
|
|
58
|
+
border: 1px solid #cccccc;
|
|
59
|
+
border-radius: 4px;
|
|
70
60
|
}
|
|
71
61
|
.footer { margin-top: 30px; font-size: 12px; color: #666; }
|
|
72
62
|
</style>
|
|
@@ -79,7 +69,7 @@ export async function POST(request: Request) {
|
|
|
79
69
|
<a href="${verificationUrl}" class="button">Verify Email Address</a>
|
|
80
70
|
</p>
|
|
81
71
|
<p>Or copy and paste this link into your browser:</p>
|
|
82
|
-
<p style="word-break: break-all; color: #
|
|
72
|
+
<p style="word-break: break-all; color: #0066cc;">${verificationUrl}</p>
|
|
83
73
|
<p>This link will expire in 24 hours.</p>
|
|
84
74
|
<div class="footer">
|
|
85
75
|
<p>If you didn't create an account, you can safely ignore this email.</p>
|
|
@@ -35,12 +35,19 @@ export async function GET(request: Request) {
|
|
|
35
35
|
// Create or update user in the main Users table
|
|
36
36
|
const user = await upsertUser(
|
|
37
37
|
`password_${authRecord.id}`, // Unique OAuth ID for password users
|
|
38
|
-
'
|
|
38
|
+
'userpass' as any, // Source type
|
|
39
39
|
authRecord.email.split('@')[0], // Username from email
|
|
40
40
|
authRecord.email,
|
|
41
41
|
undefined // No avatar for password auth
|
|
42
42
|
);
|
|
43
43
|
|
|
44
|
+
if (!user) {
|
|
45
|
+
return NextResponse.json(
|
|
46
|
+
{ error: 'Failed to create user account' },
|
|
47
|
+
{ status: 500 }
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
44
51
|
// Auto-login the user after verification
|
|
45
52
|
const db = await db_init();
|
|
46
53
|
|
|
@@ -295,6 +295,43 @@ export async function updatePassword(email: string, currentPassword: string, new
|
|
|
295
295
|
return true;
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
+
/**
|
|
299
|
+
* Regenerate email verification token for unverified accounts
|
|
300
|
+
*/
|
|
301
|
+
export async function regenerateVerificationToken(email: string): Promise<{ passwordAuth: PasswordAuth; verificationToken: string } | null> {
|
|
302
|
+
const client = await db_init();
|
|
303
|
+
|
|
304
|
+
const authRecord = await getPasswordAuthByEmail(email);
|
|
305
|
+
if (!authRecord) {
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Only regenerate for unverified accounts
|
|
310
|
+
if (authRecord.emailverified) {
|
|
311
|
+
throw new Error('Email is already verified');
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// Generate new verification token
|
|
315
|
+
const verificationToken = randomBytes(32).toString('base64url');
|
|
316
|
+
const verificationTokenExpires = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours
|
|
317
|
+
|
|
318
|
+
await db_query(client,
|
|
319
|
+
`UPDATE passwordauth
|
|
320
|
+
SET verificationtoken = ?,
|
|
321
|
+
verificationtokenexpires = ?,
|
|
322
|
+
updatedat = CURRENT_TIMESTAMP
|
|
323
|
+
WHERE id = ?`,
|
|
324
|
+
[verificationToken, verificationTokenExpires.toISOString(), authRecord.id]
|
|
325
|
+
);
|
|
326
|
+
|
|
327
|
+
const updatedAuth = await getPasswordAuthByEmail(email);
|
|
328
|
+
if (!updatedAuth) {
|
|
329
|
+
throw new Error('Failed to update verification token');
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
return { passwordAuth: updatedAuth, verificationToken };
|
|
333
|
+
}
|
|
334
|
+
|
|
298
335
|
/**
|
|
299
336
|
* Check if an email is already registered
|
|
300
337
|
*/
|
package/defaultapp/db-users.ts
CHANGED
|
@@ -10,7 +10,7 @@ import * as crypto from 'node:crypto';
|
|
|
10
10
|
export interface User {
|
|
11
11
|
userid: string;
|
|
12
12
|
OAuthID: string;
|
|
13
|
-
Source: 'google' | 'facebook' | 'apple' | 'github';
|
|
13
|
+
Source: 'google' | 'facebook' | 'apple' | 'github' | 'userpass';
|
|
14
14
|
UserName: string;
|
|
15
15
|
Email?: string;
|
|
16
16
|
AvatarURL?: string;
|
|
@@ -48,7 +48,7 @@ export async function getAllUsers(): Promise<User[]> {
|
|
|
48
48
|
`SELECT * FROM users
|
|
49
49
|
WHERE IsActive = ?
|
|
50
50
|
ORDER BY UserLevel DESC, UserName ASC`,
|
|
51
|
-
[true
|
|
51
|
+
[1] // Use 1 instead of true for PostgreSQL compatibility
|
|
52
52
|
);
|
|
53
53
|
|
|
54
54
|
return users as User[];
|
|
@@ -62,7 +62,7 @@ export async function getUserByOAuthID(oauthId: string): Promise<User | null> {
|
|
|
62
62
|
|
|
63
63
|
const users = await db_query(client,
|
|
64
64
|
"SELECT * FROM users WHERE OAuthID = ? AND IsActive = ?",
|
|
65
|
-
[oauthId, true
|
|
65
|
+
[oauthId, 1] // Use 1 instead of true for PostgreSQL compatibility
|
|
66
66
|
);
|
|
67
67
|
|
|
68
68
|
return users.length > 0 ? users[0] as User : null;
|
|
@@ -76,7 +76,7 @@ export async function getUserByID(userId: string): Promise<User | null> {
|
|
|
76
76
|
|
|
77
77
|
const users = await db_query(client,
|
|
78
78
|
"SELECT * FROM users WHERE userid = ? AND IsActive = ?",
|
|
79
|
-
[userId, true
|
|
79
|
+
[userId, 1] // Use 1 instead of true for PostgreSQL compatibility
|
|
80
80
|
);
|
|
81
81
|
|
|
82
82
|
return users.length > 0 ? users[0] as User : null;
|
|
@@ -87,7 +87,7 @@ export async function getUserByID(userId: string): Promise<User | null> {
|
|
|
87
87
|
*/
|
|
88
88
|
export async function upsertUser(
|
|
89
89
|
oauthId: string,
|
|
90
|
-
source: 'google' | 'facebook' | 'apple' | 'github',
|
|
90
|
+
source: 'google' | 'facebook' | 'apple' | 'github' | 'userpass',
|
|
91
91
|
userName: string,
|
|
92
92
|
email?: string,
|
|
93
93
|
avatarUrl?: string
|
|
@@ -122,7 +122,7 @@ export async function upsertUser(
|
|
|
122
122
|
(userid, OAuthID, Source, UserName, Email, AvatarURL, UserLevel, UserTier,
|
|
123
123
|
LastLoginDate, CreatedDate, IsActive)
|
|
124
124
|
VALUES (?, ?, ?, ?, ?, ?, ?, 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ?)`,
|
|
125
|
-
[userId, oauthId, source, userName, email || null, avatarUrl || '', permissionLevel, true
|
|
125
|
+
[userId, oauthId, source, userName, email || null, avatarUrl || '', permissionLevel, 1] // Use 1 instead of true for PostgreSQL compatibility
|
|
126
126
|
);
|
|
127
127
|
|
|
128
128
|
return (await getUserByOAuthID(oauthId))!;
|
|
@@ -142,7 +142,7 @@ export async function updateUserPermission(
|
|
|
142
142
|
if (permissionLevel < 2) {
|
|
143
143
|
const admins = await db_query(client,
|
|
144
144
|
"SELECT COUNT(*) as count FROM users WHERE UserLevel = ? AND userid != ? AND IsActive = ?",
|
|
145
|
-
[2, userId, true
|
|
145
|
+
[2, userId, 1] // Use 1 instead of true for PostgreSQL compatibility
|
|
146
146
|
);
|
|
147
147
|
|
|
148
148
|
if (admins[0].count === 0) {
|
|
@@ -169,7 +169,7 @@ export async function deleteUser(userId: string): Promise<boolean> {
|
|
|
169
169
|
if (user && user.UserLevel === 2) {
|
|
170
170
|
const admins = await db_query(client,
|
|
171
171
|
"SELECT COUNT(*) as count FROM users WHERE UserLevel = ? AND userid != ? AND IsActive = ?",
|
|
172
|
-
[2, userId, true
|
|
172
|
+
[2, userId, 1] // Use 1 instead of true for PostgreSQL compatibility
|
|
173
173
|
);
|
|
174
174
|
|
|
175
175
|
if (admins[0].count === 0) {
|
|
@@ -180,7 +180,7 @@ export async function deleteUser(userId: string): Promise<boolean> {
|
|
|
180
180
|
// Soft delete the user
|
|
181
181
|
const result = await db_query(client,
|
|
182
182
|
"UPDATE users SET IsActive = ? WHERE userid = ?",
|
|
183
|
-
[
|
|
183
|
+
[0, userId] // Use 0 instead of false for PostgreSQL compatibility
|
|
184
184
|
);
|
|
185
185
|
|
|
186
186
|
return result[0].changes > 0;
|
|
@@ -205,7 +205,7 @@ export async function getUserStats(): Promise<{
|
|
|
205
205
|
SUM(CASE WHEN UserLevel = 0 THEN 1 ELSE 0 END) as guestUsers
|
|
206
206
|
FROM users
|
|
207
207
|
WHERE IsActive = ?
|
|
208
|
-
`, [
|
|
208
|
+
`, [1]); // Use 1 instead of true for PostgreSQL compatibility
|
|
209
209
|
|
|
210
210
|
return stats[0];
|
|
211
211
|
}
|
|
@@ -286,7 +286,7 @@ export async function validateSession(sessionToken: string): Promise<{
|
|
|
286
286
|
`SELECT s.*, u.* FROM usersession s
|
|
287
287
|
JOIN users u ON s.userid = u.userid
|
|
288
288
|
WHERE s.SessionToken = ? AND s.ExpirationDate > CURRENT_TIMESTAMP AND u.IsActive = ?`,
|
|
289
|
-
[sessionToken, true
|
|
289
|
+
[sessionToken, 1] // Use 1 instead of true for PostgreSQL compatibility
|
|
290
290
|
);
|
|
291
291
|
|
|
292
292
|
if (!sessions || sessions.length === 0) {
|
package/defaultapp/middleware.ts
CHANGED
|
@@ -89,23 +89,21 @@ export function middleware(request: NextRequest) {
|
|
|
89
89
|
// Using Report-Only mode to monitor CSP violations without breaking functionality
|
|
90
90
|
response.headers.set('Content-Security-Policy-Report-Only', csp)
|
|
91
91
|
|
|
92
|
-
// Add CSRF token generation for
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
});
|
|
108
|
-
}
|
|
92
|
+
// Add CSRF token generation for all requests
|
|
93
|
+
const csrfToken = request.cookies.get('csrf-token')?.value;
|
|
94
|
+
|
|
95
|
+
// If no CSRF token exists, generate one
|
|
96
|
+
if (!csrfToken) {
|
|
97
|
+
const newCsrfToken = crypto.randomUUID();
|
|
98
|
+
response.cookies.set({
|
|
99
|
+
name: 'csrf-token',
|
|
100
|
+
value: newCsrfToken,
|
|
101
|
+
httpOnly: true,
|
|
102
|
+
secure: process.env.NODE_ENV === 'production',
|
|
103
|
+
sameSite: 'strict',
|
|
104
|
+
maxAge: 60 * 60 * 24, // 24 hours
|
|
105
|
+
path: '/'
|
|
106
|
+
});
|
|
109
107
|
}
|
|
110
108
|
|
|
111
109
|
|
|
@@ -20,6 +20,8 @@ export default function Login({ providers }: LoginProps) {
|
|
|
20
20
|
const [confirmPassword, setConfirmPassword] = useState('');
|
|
21
21
|
const [isLoading, setIsLoading] = useState(false);
|
|
22
22
|
const [message, setMessage] = useState<{ type: 'success' | 'error'; text: string } | null>(null);
|
|
23
|
+
const [showResendVerification, setShowResendVerification] = useState(false);
|
|
24
|
+
const [resendEmail, setResendEmail] = useState('');
|
|
23
25
|
|
|
24
26
|
|
|
25
27
|
const handleProviderLogin = async (provider: string) => {
|
|
@@ -49,6 +51,36 @@ export default function Login({ providers }: LoginProps) {
|
|
|
49
51
|
|
|
50
52
|
};
|
|
51
53
|
|
|
54
|
+
const handleResendVerification = async () => {
|
|
55
|
+
setError(null);
|
|
56
|
+
setMessage(null);
|
|
57
|
+
setIsLoading(true);
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
const response = await fetch('/api/Auth/resend-verification', {
|
|
61
|
+
method: 'POST',
|
|
62
|
+
headers: {
|
|
63
|
+
'Content-Type': 'application/json'
|
|
64
|
+
},
|
|
65
|
+
body: JSON.stringify({ email: resendEmail || email })
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const data = await response.json();
|
|
69
|
+
|
|
70
|
+
if (response.ok && data.success) {
|
|
71
|
+
setMessage({ type: 'success', text: data.message || 'Verification email sent! Please check your inbox.' });
|
|
72
|
+
setShowResendVerification(false);
|
|
73
|
+
setResendEmail('');
|
|
74
|
+
} else {
|
|
75
|
+
setError(data.error || 'Failed to send verification email');
|
|
76
|
+
}
|
|
77
|
+
} catch (err) {
|
|
78
|
+
setError('An unexpected error occurred');
|
|
79
|
+
} finally {
|
|
80
|
+
setIsLoading(false);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
52
84
|
const handleUsernamePasswordAuth = async (e: React.FormEvent) => {
|
|
53
85
|
e.preventDefault();
|
|
54
86
|
setError(null);
|
|
@@ -66,7 +98,9 @@ export default function Login({ providers }: LoginProps) {
|
|
|
66
98
|
|
|
67
99
|
const response = await fetch('/api/Auth/signup', {
|
|
68
100
|
method: 'POST',
|
|
69
|
-
headers: {
|
|
101
|
+
headers: {
|
|
102
|
+
'Content-Type': 'application/json'
|
|
103
|
+
},
|
|
70
104
|
body: JSON.stringify({ email, password })
|
|
71
105
|
});
|
|
72
106
|
|
|
@@ -84,7 +118,9 @@ export default function Login({ providers }: LoginProps) {
|
|
|
84
118
|
// Handle login
|
|
85
119
|
const response = await fetch('/api/Auth', {
|
|
86
120
|
method: 'POST',
|
|
87
|
-
headers: {
|
|
121
|
+
headers: {
|
|
122
|
+
'Content-Type': 'application/json'
|
|
123
|
+
},
|
|
88
124
|
body: JSON.stringify({ email, password, provider: 'username' })
|
|
89
125
|
});
|
|
90
126
|
|
|
@@ -95,6 +131,11 @@ export default function Login({ providers }: LoginProps) {
|
|
|
95
131
|
window.location.href = '/';
|
|
96
132
|
} else {
|
|
97
133
|
setError(data.error || 'Login failed');
|
|
134
|
+
// Check if error is about email verification
|
|
135
|
+
if (response.status === 403 || data.error?.toLowerCase().includes('verify')) {
|
|
136
|
+
setShowResendVerification(true);
|
|
137
|
+
setResendEmail(email);
|
|
138
|
+
}
|
|
98
139
|
}
|
|
99
140
|
}
|
|
100
141
|
} catch (err) {
|
|
@@ -179,17 +220,18 @@ export default function Login({ providers }: LoginProps) {
|
|
|
179
220
|
</div>
|
|
180
221
|
|
|
181
222
|
<div className="text-center">
|
|
182
|
-
<
|
|
183
|
-
|
|
184
|
-
onClick={() => {
|
|
223
|
+
<a
|
|
224
|
+
href="#"
|
|
225
|
+
onClick={(e) => {
|
|
226
|
+
e.preventDefault();
|
|
185
227
|
setIsSignup(!isSignup);
|
|
186
228
|
setError(null);
|
|
187
229
|
setMessage(null);
|
|
188
230
|
}}
|
|
189
|
-
className="text-sm text-indigo-600 hover:text-indigo-500"
|
|
231
|
+
className="text-sm text-indigo-600 hover:text-indigo-500 underline"
|
|
190
232
|
>
|
|
191
233
|
{isSignup ? 'Already have an account? Sign in' : "Don't have an account? Sign up"}
|
|
192
|
-
</
|
|
234
|
+
</a>
|
|
193
235
|
</div>
|
|
194
236
|
</form>
|
|
195
237
|
)}
|
|
@@ -234,6 +276,40 @@ export default function Login({ providers }: LoginProps) {
|
|
|
234
276
|
{error}
|
|
235
277
|
</div>
|
|
236
278
|
)}
|
|
279
|
+
|
|
280
|
+
{showResendVerification && (
|
|
281
|
+
<div className="mt-4 p-4 border border-gray-200 rounded-md bg-gray-50">
|
|
282
|
+
<p className="text-sm text-gray-700 mb-3">
|
|
283
|
+
Need a new verification email? Enter your email address and we'll send you a new link.
|
|
284
|
+
</p>
|
|
285
|
+
<div className="space-y-3">
|
|
286
|
+
<input
|
|
287
|
+
type="email"
|
|
288
|
+
value={resendEmail}
|
|
289
|
+
onChange={(e) => setResendEmail(e.target.value)}
|
|
290
|
+
placeholder="Email address"
|
|
291
|
+
className="block w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 text-sm"
|
|
292
|
+
/>
|
|
293
|
+
<button
|
|
294
|
+
onClick={handleResendVerification}
|
|
295
|
+
disabled={isLoading || !resendEmail}
|
|
296
|
+
className="w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 disabled:opacity-50"
|
|
297
|
+
>
|
|
298
|
+
{isLoading ? 'Sending...' : 'Resend Verification Email'}
|
|
299
|
+
</button>
|
|
300
|
+
<button
|
|
301
|
+
type="button"
|
|
302
|
+
onClick={() => {
|
|
303
|
+
setShowResendVerification(false);
|
|
304
|
+
setResendEmail('');
|
|
305
|
+
}}
|
|
306
|
+
className="w-full text-sm text-gray-500 hover:text-gray-700 bg-transparent border-0 p-0 underline"
|
|
307
|
+
>
|
|
308
|
+
Cancel
|
|
309
|
+
</button>
|
|
310
|
+
</div>
|
|
311
|
+
</div>
|
|
312
|
+
)}
|
|
237
313
|
</div>
|
|
238
314
|
</div>
|
|
239
315
|
);
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Resend verification email endpoint
|
|
3
|
+
* Allows users to request a new verification email
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { NextResponse } from 'next/server';
|
|
7
|
+
import { regenerateVerificationToken } from '../../../db-password-auth';
|
|
8
|
+
import { send_email } from '../../../storage/email';
|
|
9
|
+
|
|
10
|
+
// Email validation regex
|
|
11
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
12
|
+
|
|
13
|
+
export async function POST(request: Request) {
|
|
14
|
+
try {
|
|
15
|
+
const { email } = await request.json();
|
|
16
|
+
|
|
17
|
+
// Validate email format
|
|
18
|
+
if (!email || !emailRegex.test(email)) {
|
|
19
|
+
return NextResponse.json(
|
|
20
|
+
{ error: 'Invalid email address' },
|
|
21
|
+
{ status: 400 }
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Regenerate verification token
|
|
26
|
+
const result = await regenerateVerificationToken(email);
|
|
27
|
+
|
|
28
|
+
if (!result) {
|
|
29
|
+
// Don't reveal whether the email exists or not
|
|
30
|
+
return NextResponse.json({
|
|
31
|
+
success: true,
|
|
32
|
+
message: 'If an unverified account exists with this email, a verification email has been sent.'
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const { verificationToken } = result;
|
|
37
|
+
|
|
38
|
+
// Get site domain from environment or default
|
|
39
|
+
const siteDomain = process.env.SITE_DOMAIN || 'https://sitepaige.com';
|
|
40
|
+
const verificationUrl = `${siteDomain}/api/Auth/verify-email?token=${verificationToken}`;
|
|
41
|
+
|
|
42
|
+
// Send verification email
|
|
43
|
+
try {
|
|
44
|
+
const emailHtml = `
|
|
45
|
+
<!DOCTYPE html>
|
|
46
|
+
<html>
|
|
47
|
+
<head>
|
|
48
|
+
<style>
|
|
49
|
+
body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
|
|
50
|
+
.container { max-width: 600px; margin: 0 auto; padding: 20px; }
|
|
51
|
+
.button {
|
|
52
|
+
display: inline-block;
|
|
53
|
+
padding: 12px 24px;
|
|
54
|
+
background-color: #f0f0f0;
|
|
55
|
+
color: #000000;
|
|
56
|
+
text-decoration: none;
|
|
57
|
+
border: 1px solid #cccccc;
|
|
58
|
+
border-radius: 4px;
|
|
59
|
+
}
|
|
60
|
+
.footer { margin-top: 30px; font-size: 12px; color: #666; }
|
|
61
|
+
</style>
|
|
62
|
+
</head>
|
|
63
|
+
<body>
|
|
64
|
+
<div class="container">
|
|
65
|
+
<h2>Verify Your Email Address</h2>
|
|
66
|
+
<p>You requested a new verification email for your account at ${siteDomain}. Please verify your email address by clicking the button below:</p>
|
|
67
|
+
<p style="margin: 30px 0;">
|
|
68
|
+
<a href="${verificationUrl}" class="button">Verify Email Address</a>
|
|
69
|
+
</p>
|
|
70
|
+
<p>Or copy and paste this link into your browser:</p>
|
|
71
|
+
<p style="word-break: break-all; color: #0066cc;">${verificationUrl}</p>
|
|
72
|
+
<p>This link will expire in 24 hours.</p>
|
|
73
|
+
<div class="footer">
|
|
74
|
+
<p>If you didn't request this email, you can safely ignore it.</p>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</body>
|
|
78
|
+
</html>
|
|
79
|
+
`;
|
|
80
|
+
|
|
81
|
+
const emailText = `
|
|
82
|
+
Verify Your Email Address
|
|
83
|
+
|
|
84
|
+
You requested a new verification email for your account at ${siteDomain}. Please verify your email address by clicking the link below:
|
|
85
|
+
|
|
86
|
+
${verificationUrl}
|
|
87
|
+
|
|
88
|
+
This link will expire in 24 hours.
|
|
89
|
+
|
|
90
|
+
If you didn't request this email, you can safely ignore it.
|
|
91
|
+
`;
|
|
92
|
+
|
|
93
|
+
await send_email({
|
|
94
|
+
to: email,
|
|
95
|
+
from: process.env.EMAIL_FROM || 'noreply@sitepaige.com',
|
|
96
|
+
subject: 'Verify your email address',
|
|
97
|
+
html: emailHtml,
|
|
98
|
+
text: emailText
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
return NextResponse.json({
|
|
102
|
+
success: true,
|
|
103
|
+
message: 'Verification email sent successfully! Please check your email.'
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
} catch (emailError) {
|
|
107
|
+
console.error('Failed to send verification email:', emailError);
|
|
108
|
+
return NextResponse.json({
|
|
109
|
+
success: false,
|
|
110
|
+
error: 'Failed to send verification email. Please try again later.'
|
|
111
|
+
}, { status: 500 });
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
} catch (error: any) {
|
|
115
|
+
console.error('Resend verification error:', error);
|
|
116
|
+
|
|
117
|
+
if (error.message === 'Email is already verified') {
|
|
118
|
+
return NextResponse.json(
|
|
119
|
+
{ error: 'This email is already verified. Please sign in.' },
|
|
120
|
+
{ status: 400 }
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Generic response to avoid revealing whether email exists
|
|
125
|
+
return NextResponse.json({
|
|
126
|
+
success: true,
|
|
127
|
+
message: 'If an unverified account exists with this email, a verification email has been sent.'
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -10,7 +10,6 @@ import * as crypto from 'node:crypto';
|
|
|
10
10
|
|
|
11
11
|
import { db_init, db_query } from '../../db';
|
|
12
12
|
import { upsertUser, storeOAuthToken, validateSession, rotateSession } from '../../db-users';
|
|
13
|
-
import { validateCsrfToken } from '../../csrf';
|
|
14
13
|
|
|
15
14
|
type OAuthProvider = 'google' | 'facebook' | 'apple' | 'github';
|
|
16
15
|
|
|
@@ -395,15 +394,6 @@ export async function GET() {
|
|
|
395
394
|
}
|
|
396
395
|
|
|
397
396
|
export async function DELETE(request: Request) {
|
|
398
|
-
// Validate CSRF token for logout
|
|
399
|
-
const isValidCsrf = await validateCsrfToken(request);
|
|
400
|
-
if (!isValidCsrf) {
|
|
401
|
-
return NextResponse.json(
|
|
402
|
-
{ error: 'Invalid CSRF token' },
|
|
403
|
-
{ status: 403 }
|
|
404
|
-
);
|
|
405
|
-
}
|
|
406
|
-
|
|
407
397
|
const db = await db_init();
|
|
408
398
|
|
|
409
399
|
try {
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { NextResponse } from 'next/server';
|
|
7
|
-
import { validateCsrfToken } from '../../../csrf';
|
|
8
7
|
import { createPasswordAuth } from '../../../db-password-auth';
|
|
9
8
|
import { send_email } from '../../../storage/email';
|
|
10
9
|
|
|
@@ -15,15 +14,6 @@ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
|
15
14
|
const passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/;
|
|
16
15
|
|
|
17
16
|
export async function POST(request: Request) {
|
|
18
|
-
// Validate CSRF token
|
|
19
|
-
const isValidCsrf = await validateCsrfToken(request);
|
|
20
|
-
if (!isValidCsrf) {
|
|
21
|
-
return NextResponse.json(
|
|
22
|
-
{ error: 'Invalid CSRF token' },
|
|
23
|
-
{ status: 403 }
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
17
|
try {
|
|
28
18
|
const { email, password } = await request.json();
|
|
29
19
|
|
|
@@ -62,11 +52,11 @@ export async function POST(request: Request) {
|
|
|
62
52
|
.button {
|
|
63
53
|
display: inline-block;
|
|
64
54
|
padding: 12px 24px;
|
|
65
|
-
background-color: #
|
|
66
|
-
color:
|
|
55
|
+
background-color: #f0f0f0;
|
|
56
|
+
color: #000000;
|
|
67
57
|
text-decoration: none;
|
|
68
|
-
border
|
|
69
|
-
|
|
58
|
+
border: 1px solid #cccccc;
|
|
59
|
+
border-radius: 4px;
|
|
70
60
|
}
|
|
71
61
|
.footer { margin-top: 30px; font-size: 12px; color: #666; }
|
|
72
62
|
</style>
|
|
@@ -79,7 +69,7 @@ export async function POST(request: Request) {
|
|
|
79
69
|
<a href="${verificationUrl}" class="button">Verify Email Address</a>
|
|
80
70
|
</p>
|
|
81
71
|
<p>Or copy and paste this link into your browser:</p>
|
|
82
|
-
<p style="word-break: break-all; color: #
|
|
72
|
+
<p style="word-break: break-all; color: #0066cc;">${verificationUrl}</p>
|
|
83
73
|
<p>This link will expire in 24 hours.</p>
|
|
84
74
|
<div class="footer">
|
|
85
75
|
<p>If you didn't create an account, you can safely ignore this email.</p>
|
|
@@ -35,12 +35,19 @@ export async function GET(request: Request) {
|
|
|
35
35
|
// Create or update user in the main Users table
|
|
36
36
|
const user = await upsertUser(
|
|
37
37
|
`password_${authRecord.id}`, // Unique OAuth ID for password users
|
|
38
|
-
'
|
|
38
|
+
'userpass' as any, // Source type
|
|
39
39
|
authRecord.email.split('@')[0], // Username from email
|
|
40
40
|
authRecord.email,
|
|
41
41
|
undefined // No avatar for password auth
|
|
42
42
|
);
|
|
43
43
|
|
|
44
|
+
if (!user) {
|
|
45
|
+
return NextResponse.json(
|
|
46
|
+
{ error: 'Failed to create user account' },
|
|
47
|
+
{ status: 500 }
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
44
51
|
// Auto-login the user after verification
|
|
45
52
|
const db = await db_init();
|
|
46
53
|
|
|
@@ -295,6 +295,43 @@ export async function updatePassword(email: string, currentPassword: string, new
|
|
|
295
295
|
return true;
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
+
/**
|
|
299
|
+
* Regenerate email verification token for unverified accounts
|
|
300
|
+
*/
|
|
301
|
+
export async function regenerateVerificationToken(email: string): Promise<{ passwordAuth: PasswordAuth; verificationToken: string } | null> {
|
|
302
|
+
const client = await db_init();
|
|
303
|
+
|
|
304
|
+
const authRecord = await getPasswordAuthByEmail(email);
|
|
305
|
+
if (!authRecord) {
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Only regenerate for unverified accounts
|
|
310
|
+
if (authRecord.emailverified) {
|
|
311
|
+
throw new Error('Email is already verified');
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// Generate new verification token
|
|
315
|
+
const verificationToken = randomBytes(32).toString('base64url');
|
|
316
|
+
const verificationTokenExpires = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours
|
|
317
|
+
|
|
318
|
+
await db_query(client,
|
|
319
|
+
`UPDATE passwordauth
|
|
320
|
+
SET verificationtoken = ?,
|
|
321
|
+
verificationtokenexpires = ?,
|
|
322
|
+
updatedat = CURRENT_TIMESTAMP
|
|
323
|
+
WHERE id = ?`,
|
|
324
|
+
[verificationToken, verificationTokenExpires.toISOString(), authRecord.id]
|
|
325
|
+
);
|
|
326
|
+
|
|
327
|
+
const updatedAuth = await getPasswordAuthByEmail(email);
|
|
328
|
+
if (!updatedAuth) {
|
|
329
|
+
throw new Error('Failed to update verification token');
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
return { passwordAuth: updatedAuth, verificationToken };
|
|
333
|
+
}
|
|
334
|
+
|
|
298
335
|
/**
|
|
299
336
|
* Check if an email is already registered
|
|
300
337
|
*/
|
|
@@ -10,7 +10,7 @@ import * as crypto from 'node:crypto';
|
|
|
10
10
|
export interface User {
|
|
11
11
|
userid: string;
|
|
12
12
|
OAuthID: string;
|
|
13
|
-
Source: 'google' | 'facebook' | 'apple' | 'github';
|
|
13
|
+
Source: 'google' | 'facebook' | 'apple' | 'github' | 'userpass';
|
|
14
14
|
UserName: string;
|
|
15
15
|
Email?: string;
|
|
16
16
|
AvatarURL?: string;
|
|
@@ -48,7 +48,7 @@ export async function getAllUsers(): Promise<User[]> {
|
|
|
48
48
|
`SELECT * FROM users
|
|
49
49
|
WHERE IsActive = ?
|
|
50
50
|
ORDER BY UserLevel DESC, UserName ASC`,
|
|
51
|
-
[true
|
|
51
|
+
[1] // Use 1 instead of true for PostgreSQL compatibility
|
|
52
52
|
);
|
|
53
53
|
|
|
54
54
|
return users as User[];
|
|
@@ -62,7 +62,7 @@ export async function getUserByOAuthID(oauthId: string): Promise<User | null> {
|
|
|
62
62
|
|
|
63
63
|
const users = await db_query(client,
|
|
64
64
|
"SELECT * FROM users WHERE OAuthID = ? AND IsActive = ?",
|
|
65
|
-
[oauthId, true
|
|
65
|
+
[oauthId, 1] // Use 1 instead of true for PostgreSQL compatibility
|
|
66
66
|
);
|
|
67
67
|
|
|
68
68
|
return users.length > 0 ? users[0] as User : null;
|
|
@@ -76,7 +76,7 @@ export async function getUserByID(userId: string): Promise<User | null> {
|
|
|
76
76
|
|
|
77
77
|
const users = await db_query(client,
|
|
78
78
|
"SELECT * FROM users WHERE userid = ? AND IsActive = ?",
|
|
79
|
-
[userId, true
|
|
79
|
+
[userId, 1] // Use 1 instead of true for PostgreSQL compatibility
|
|
80
80
|
);
|
|
81
81
|
|
|
82
82
|
return users.length > 0 ? users[0] as User : null;
|
|
@@ -87,7 +87,7 @@ export async function getUserByID(userId: string): Promise<User | null> {
|
|
|
87
87
|
*/
|
|
88
88
|
export async function upsertUser(
|
|
89
89
|
oauthId: string,
|
|
90
|
-
source: 'google' | 'facebook' | 'apple' | 'github',
|
|
90
|
+
source: 'google' | 'facebook' | 'apple' | 'github' | 'userpass',
|
|
91
91
|
userName: string,
|
|
92
92
|
email?: string,
|
|
93
93
|
avatarUrl?: string
|
|
@@ -122,7 +122,7 @@ export async function upsertUser(
|
|
|
122
122
|
(userid, OAuthID, Source, UserName, Email, AvatarURL, UserLevel, UserTier,
|
|
123
123
|
LastLoginDate, CreatedDate, IsActive)
|
|
124
124
|
VALUES (?, ?, ?, ?, ?, ?, ?, 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ?)`,
|
|
125
|
-
[userId, oauthId, source, userName, email || null, avatarUrl || '', permissionLevel, true
|
|
125
|
+
[userId, oauthId, source, userName, email || null, avatarUrl || '', permissionLevel, 1] // Use 1 instead of true for PostgreSQL compatibility
|
|
126
126
|
);
|
|
127
127
|
|
|
128
128
|
return (await getUserByOAuthID(oauthId))!;
|
|
@@ -142,7 +142,7 @@ export async function updateUserPermission(
|
|
|
142
142
|
if (permissionLevel < 2) {
|
|
143
143
|
const admins = await db_query(client,
|
|
144
144
|
"SELECT COUNT(*) as count FROM users WHERE UserLevel = ? AND userid != ? AND IsActive = ?",
|
|
145
|
-
[2, userId, true
|
|
145
|
+
[2, userId, 1] // Use 1 instead of true for PostgreSQL compatibility
|
|
146
146
|
);
|
|
147
147
|
|
|
148
148
|
if (admins[0].count === 0) {
|
|
@@ -169,7 +169,7 @@ export async function deleteUser(userId: string): Promise<boolean> {
|
|
|
169
169
|
if (user && user.UserLevel === 2) {
|
|
170
170
|
const admins = await db_query(client,
|
|
171
171
|
"SELECT COUNT(*) as count FROM users WHERE UserLevel = ? AND userid != ? AND IsActive = ?",
|
|
172
|
-
[2, userId, true
|
|
172
|
+
[2, userId, 1] // Use 1 instead of true for PostgreSQL compatibility
|
|
173
173
|
);
|
|
174
174
|
|
|
175
175
|
if (admins[0].count === 0) {
|
|
@@ -180,7 +180,7 @@ export async function deleteUser(userId: string): Promise<boolean> {
|
|
|
180
180
|
// Soft delete the user
|
|
181
181
|
const result = await db_query(client,
|
|
182
182
|
"UPDATE users SET IsActive = ? WHERE userid = ?",
|
|
183
|
-
[
|
|
183
|
+
[0, userId] // Use 0 instead of false for PostgreSQL compatibility
|
|
184
184
|
);
|
|
185
185
|
|
|
186
186
|
return result[0].changes > 0;
|
|
@@ -205,7 +205,7 @@ export async function getUserStats(): Promise<{
|
|
|
205
205
|
SUM(CASE WHEN UserLevel = 0 THEN 1 ELSE 0 END) as guestUsers
|
|
206
206
|
FROM users
|
|
207
207
|
WHERE IsActive = ?
|
|
208
|
-
`, [
|
|
208
|
+
`, [1]); // Use 1 instead of true for PostgreSQL compatibility
|
|
209
209
|
|
|
210
210
|
return stats[0];
|
|
211
211
|
}
|
|
@@ -286,7 +286,7 @@ export async function validateSession(sessionToken: string): Promise<{
|
|
|
286
286
|
`SELECT s.*, u.* FROM usersession s
|
|
287
287
|
JOIN users u ON s.userid = u.userid
|
|
288
288
|
WHERE s.SessionToken = ? AND s.ExpirationDate > CURRENT_TIMESTAMP AND u.IsActive = ?`,
|
|
289
|
-
[sessionToken, true
|
|
289
|
+
[sessionToken, 1] // Use 1 instead of true for PostgreSQL compatibility
|
|
290
290
|
);
|
|
291
291
|
|
|
292
292
|
if (!sessions || sessions.length === 0) {
|
|
@@ -89,23 +89,21 @@ export function middleware(request: NextRequest) {
|
|
|
89
89
|
// Using Report-Only mode to monitor CSP violations without breaking functionality
|
|
90
90
|
response.headers.set('Content-Security-Policy-Report-Only', csp)
|
|
91
91
|
|
|
92
|
-
// Add CSRF token generation for
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
});
|
|
108
|
-
}
|
|
92
|
+
// Add CSRF token generation for all requests
|
|
93
|
+
const csrfToken = request.cookies.get('csrf-token')?.value;
|
|
94
|
+
|
|
95
|
+
// If no CSRF token exists, generate one
|
|
96
|
+
if (!csrfToken) {
|
|
97
|
+
const newCsrfToken = crypto.randomUUID();
|
|
98
|
+
response.cookies.set({
|
|
99
|
+
name: 'csrf-token',
|
|
100
|
+
value: newCsrfToken,
|
|
101
|
+
httpOnly: true,
|
|
102
|
+
secure: process.env.NODE_ENV === 'production',
|
|
103
|
+
sameSite: 'strict',
|
|
104
|
+
maxAge: 60 * 60 * 24, // 24 hours
|
|
105
|
+
path: '/'
|
|
106
|
+
});
|
|
109
107
|
}
|
|
110
108
|
|
|
111
109
|
|
package/dist/generators/views.js
CHANGED
|
@@ -159,14 +159,16 @@ export function generateStyleProps(systemView, isContainer) {
|
|
|
159
159
|
// Combined alignment using placeItems (matches rview.tsx exactly)
|
|
160
160
|
const verticalAlign = (systemView.verticalAlign || '').toLowerCase();
|
|
161
161
|
const align = (systemView.align || '').toLowerCase();
|
|
162
|
-
if (
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
162
|
+
if (systemView.type !== 'container') {
|
|
163
|
+
if (verticalAlign === 'top') {
|
|
164
|
+
styleProps.push(`alignContent: 'start'`);
|
|
165
|
+
}
|
|
166
|
+
else if (verticalAlign === 'center') {
|
|
167
|
+
styleProps.push(`alignContent: 'center'`);
|
|
168
|
+
}
|
|
169
|
+
else if (verticalAlign === 'bottom') {
|
|
170
|
+
styleProps.push(`alignContent: 'end'`);
|
|
171
|
+
}
|
|
170
172
|
}
|
|
171
173
|
// Text alignment
|
|
172
174
|
if (systemView.type === 'container') {
|
|
@@ -540,7 +542,7 @@ export default function ${comp}() {
|
|
|
540
542
|
|
|
541
543
|
return (
|
|
542
544
|
<>
|
|
543
|
-
<div className={\`hidden md:flex gap-4 p-
|
|
545
|
+
<div className={\`hidden md:flex gap-4 p-3 \${alignmentClasses[align as keyof typeof alignmentClasses]}\`}>
|
|
544
546
|
{items.map((item, index) => (
|
|
545
547
|
<button
|
|
546
548
|
key={index}
|
|
@@ -600,6 +602,8 @@ export default function ${comp}() {
|
|
|
600
602
|
// Convert authProviders object to providers array
|
|
601
603
|
const providers = [];
|
|
602
604
|
if (authProviders) {
|
|
605
|
+
if (authProviders.password)
|
|
606
|
+
providers.push('username');
|
|
603
607
|
if (authProviders.google)
|
|
604
608
|
providers.push('google');
|
|
605
609
|
if (authProviders.facebook)
|
|
@@ -900,8 +904,6 @@ export default function ${comp}(){
|
|
|
900
904
|
const colsPerView = legacy ? Math.floor(12 / normalized.length) : null;
|
|
901
905
|
const importLines = [];
|
|
902
906
|
const blocks = [];
|
|
903
|
-
// Check if container has background image for opacity handling
|
|
904
|
-
const hasContainerBackground = v.background_image && v.background_image !== '';
|
|
905
907
|
for (const s of normalized) {
|
|
906
908
|
const subId = s.viewId || s.id || "";
|
|
907
909
|
if (!subId)
|
|
@@ -936,8 +938,6 @@ export default function ${comp}(){
|
|
|
936
938
|
const innerWrapperClasses = [
|
|
937
939
|
"w-full",
|
|
938
940
|
"h-full",
|
|
939
|
-
"flex",
|
|
940
|
-
"flex-col",
|
|
941
941
|
// Vertical alignment
|
|
942
942
|
verticalAlign === 'top' ? 'justify-start' :
|
|
943
943
|
verticalAlign === 'bottom' ? 'justify-end' : 'justify-center',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/generators/views.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/generators/views.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sitepaige-mcp-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "MCP server for generating web applications using SitePaige AI. Generate frontend (FREE/12 credits) then optionally add backend (50 credits)",
|
|
6
6
|
"keywords": [
|