Add Google OAuth authentication support
- Add Google OAuth token verification and user lookup/creation - Add GoogleAuthRequest and GoogleAuthResponse DTOs - Add GoogleLogin handler in auth_handler.go - Add google_auth.go service for token verification - Add FindByGoogleID repository method for user lookup - Add GoogleID field to User model - Add Google OAuth configuration (client ID, enabled flag) - Add i18n translations for Google auth error messages - Add Google verification email template support 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -275,6 +275,70 @@ The Casera Team
|
||||
return s.SendEmail(to, subject, htmlBody, textBody)
|
||||
}
|
||||
|
||||
// SendGoogleWelcomeEmail sends a welcome email for Google Sign In users (no verification needed)
|
||||
func (s *EmailService) SendGoogleWelcomeEmail(to, firstName string) error {
|
||||
subject := "Welcome to Casera!"
|
||||
|
||||
name := firstName
|
||||
if name == "" {
|
||||
name = "there"
|
||||
}
|
||||
|
||||
bodyContent := fmt.Sprintf(`
|
||||
%s
|
||||
<!-- Body -->
|
||||
<tr>
|
||||
<td style="background: #FFFFFF; padding: 40px 30px;">
|
||||
<p style="font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 18px; font-weight: 600; color: #1a1a1a; margin: 0 0 20px 0;">Hi %s,</p>
|
||||
<p style="font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 16px; line-height: 1.6; color: #4B5563; margin: 0 0 24px 0;">Thank you for joining Casera! Your account has been created and you're ready to start managing your properties.</p>
|
||||
|
||||
<!-- Features Box -->
|
||||
<table role="presentation" width="100%%" cellspacing="0" cellpadding="0">
|
||||
<tr>
|
||||
<td style="background: #F8FAFC; border-radius: 12px; padding: 24px;">
|
||||
<p style="font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 16px; font-weight: 700; color: #1a1a1a; margin: 0 0 16px 0;">Here's what you can do with Casera:</p>
|
||||
<p style="font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 14px; color: #4B5563; margin: 12px 0;">🏠 <strong>Manage Properties</strong> - Track all your homes and rentals in one place</p>
|
||||
<p style="font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 14px; color: #4B5563; margin: 12px 0;">✅ <strong>Task Management</strong> - Never miss maintenance with smart scheduling</p>
|
||||
<p style="font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 14px; color: #4B5563; margin: 12px 0;">👷 <strong>Contractor Directory</strong> - Keep your trusted pros organized</p>
|
||||
<p style="font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 14px; color: #4B5563; margin: 12px 0;">📄 <strong>Document Storage</strong> - Store warranties, manuals, and important records</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p style="font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 14px; line-height: 1.6; color: #6B7280; margin: 24px 0 0 0;">If you have any questions, feel free to reach out to us at support@casera.app.</p>
|
||||
|
||||
<p style="font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-size: 14px; color: #6B7280; margin: 30px 0 0 0;">Best regards,<br><strong style="color: #1a1a1a;">The Casera Team</strong></p>
|
||||
</td>
|
||||
</tr>
|
||||
%s`,
|
||||
emailHeader("Welcome!"),
|
||||
name,
|
||||
emailFooter(time.Now().Year()))
|
||||
|
||||
htmlBody := fmt.Sprintf(baseEmailTemplate(), subject, bodyContent)
|
||||
|
||||
textBody := fmt.Sprintf(`
|
||||
Welcome to Casera!
|
||||
|
||||
Hi %s,
|
||||
|
||||
Thank you for joining Casera! Your account has been created and you're ready to start managing your properties.
|
||||
|
||||
Here's what you can do with Casera:
|
||||
- Manage Properties: Track all your homes and rentals in one place
|
||||
- Task Management: Never miss maintenance with smart scheduling
|
||||
- Contractor Directory: Keep your trusted pros organized
|
||||
- Document Storage: Store warranties, manuals, and important records
|
||||
|
||||
If you have any questions, feel free to reach out to us at support@casera.app.
|
||||
|
||||
Best regards,
|
||||
The Casera Team
|
||||
`, name)
|
||||
|
||||
return s.SendEmail(to, subject, htmlBody, textBody)
|
||||
}
|
||||
|
||||
// SendPostVerificationEmail sends a welcome email after user verifies their email address
|
||||
func (s *EmailService) SendPostVerificationEmail(to, firstName string) error {
|
||||
subject := "You're All Set! Getting Started with Casera"
|
||||
|
||||
Reference in New Issue
Block a user