Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 55
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
Sepa
0.00% covered (danger)
0.00%
0 / 55
0.00% covered (danger)
0.00%
0 / 3
156
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 send_vefification_email
0.00% covered (danger)
0.00%
0 / 50
0.00% covered (danger)
0.00%
0 / 1
90
 isEmailValid
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace App\Http\Controllers;
4
5use Illuminate\Support\Facades\Validator;
6use Illuminate\Contracts\Routing\ResponseFactory;
7use Illuminate\Http\Request;
8use Illuminate\Http\Response;
9use App\Exceptions\AppException;
10
11class Sepa extends Controller
12{
13    public function __construct() {}
14
15    public function send_vefification_email(Request $request): ResponseFactory|Response{
16
17        try {
18
19            $data = $request->all();
20
21            $validator = Validator::make($data, [
22                'email' => ['required', 'email'],
23                'verification_link' => ['required', 'url'],
24            ]);
25
26            if ($validator->fails()) {
27
28                if ($validator->errors()->has('verification_link')
29                    && ! $request->has('verification_link')) {
30
31                    return response()->json([
32                        'status' => 'error',
33                        'message' => 'Missing required field: verification_link',
34                        'code' => 'MISSING_FIELD',
35                    ], 400);
36                }
37
38                if ($validator->errors()->has('email')
39                    && ! $request->has('email')) {
40
41                    return response()->json([
42                        'status' => 'error',
43                        'message' => 'Missing required field: email',
44                        'code' => 'MISSING_FIELD',
45                    ], 400);
46                }
47
48                if (! $this->isEmailValid($data['email'])) {
49                    return response([
50                        'status' => 'error',
51                        'message' => 'Invalid email address format',
52                        'code' => 'INVALID_EMAIL',
53                    ], 400);
54                }
55
56            }
57
58            $toEmail = $data['email'];
59
60            $mail = new \SendGrid\Mail\Mail;
61
62            $mail->setFrom('fire@fire.es', 'Fire Service Titan');
63            $mail->addTo($toEmail);
64            $mail->setTemplateId('d-39337e738fc04ba68767b7d13124e2cf');
65            $mail->addDynamicTemplateDatas([
66                'verification_link' => $data['verification_link'],
67            ]);
68            
69            $sendgrid = new \SendGrid(config('services.sendgrid.api_key'));
70
71            $response = $sendgrid->send($mail);
72            if ($response->statusCode() == 202) {
73                return response([
74                    'status' => 'success',
75                    'message' => 'Verification email sent successfully',
76                    'email' => $toEmail,
77                ], 200);
78            }
79
80            return response([
81                'status' => 'error',
82                'message' => 'Failed to send email. Please try again later.',
83                'code' => 'EMAIL_DELIVERY_FAILED',
84            ], 500);
85
86        } catch (\Exception $e) {
87            report(AppException::fromException($e, 'SEND_VERIFICATION_EMAIL_EXCEPTION'));
88            return response(['message' => 'KO', 'error' => $e->getMessage()]);
89        }
90
91    }
92    
93    function isEmailValid($email): bool {
94        
95        $pattern = '/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/';
96        
97        if (preg_match($pattern, (string) $email)) {
98            return true;
99        } else {
100            return false;
101        }
102
103    }
104}