Skip to content

Commit 7fa690a

Browse files
committed
Added decryption on methods to retrieve tickets
Signed-off-by: [email protected] <[email protected]> Change-Id: Ib8ff73b8565eccffe7458afb9055b0df609ea1f8
1 parent bd72bc2 commit 7fa690a

File tree

3 files changed

+101
-9
lines changed

3 files changed

+101
-9
lines changed

app/Models/Foundation/Summit/Summit.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6490,6 +6490,10 @@ public function getQRCodesEncKey():?string {
64906490
return $this->qr_codes_enc_key;
64916491
}
64926492

6493+
public function hasQRCodesEncKey():bool{
6494+
return !empty($this->qr_codes_enc_key);
6495+
}
6496+
64936497
/**
64946498
* @param string $qr_codes_enc_key
64956499
*/

app/Services/Model/AttendeeService.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use App\Jobs\Emails\ProcessAttendeesEmailRequestJob;
1616
use App\Models\Foundation\Summit\Repositories\ISummitAttendeeBadgeRepository;
1717
use App\Services\Model\Strategies\EmailActions\EmailActionsStrategyFactory;
18+
use App\Utils\AES;
1819
use Illuminate\Support\Facades\Log;
1920
use libs\utils\ITransactionService;
2021
use models\exceptions\EntityNotFoundException;
@@ -550,6 +551,8 @@ public function doVirtualCheckin(Summit $summit, int $attendee_id): ?SummitAtten
550551
{
551552
return $this->tx_service->transaction(function() use($summit, $attendee_id){
552553

554+
Log::debug(sprintf("AttendeeService::doVirtualCheckin summit id %s attendee id %s", $summit->getId(), $attendee_id));
555+
553556
$attendee = $summit->getAttendeeById($attendee_id);
554557
if(is_null($attendee))
555558
throw new EntityNotFoundException(sprintf("Attendee does not belongs to summit id %s.", $summit->getId()));
@@ -560,9 +563,21 @@ public function doVirtualCheckin(Summit $summit, int $attendee_id): ?SummitAtten
560563
});
561564
}
562565

566+
/**
567+
* @param Summit $summit
568+
* @param String $qr_code
569+
* @return void
570+
* @throws \Exception
571+
*/
563572
public function doCheckIn(Summit $summit, String $qr_code): void
564573
{
565574
$this->tx_service->transaction(function() use($summit, $qr_code){
575+
Log::debug(sprintf("AttendeeService::doCheckIn summit id %s qr_code %s", $summit->getId(), $qr_code));
576+
577+
if(!str_starts_with($qr_code, $summit->getBadgeQRPrefix()) && $summit->hasQRCodesEncKey()){
578+
Log::debug(sprintf("AttendeeService::doCheckIn summit id %s qr_code %s decrypting", $summit->getId(), $qr_code));
579+
$qr_code = AES::decrypt($summit->getQRCodesEncKey(), $qr_code)->getData();
580+
}
566581

567582
$fields = SummitAttendeeBadge::parseQRCode($qr_code);
568583
$ticket_number = $fields['ticket_number'];
@@ -573,9 +588,10 @@ public function doCheckIn(Summit $summit, String $qr_code): void
573588
(
574589
sprintf
575590
(
576-
"%s qr code is not valid for summit %s.",
591+
"%s QR CODE is not valid for summit %s Prefix %s.",
577592
$qr_code,
578-
$summit->getId()
593+
$summit->getId(),
594+
$summit->getBadgeQRPrefix()
579595
)
580596
);
581597

app/Services/Model/Strategies/TicketFinder/TicketFinderStrategyFactory.php

Lines changed: 79 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use App\Services\Model\Strategies\TicketFinder\Strategies\TicketFinderByExternalFeedStrategy;
1919
use App\Services\Model\Strategies\TicketFinder\Strategies\TicketFinderByIdStrategy;
2020
use App\Services\Model\Strategies\TicketFinder\Strategies\TicketFinderByNumberStrategy;
21+
use App\Utils\AES;
2122
use Illuminate\Support\Facades\Log;
2223
use models\exceptions\ValidationException;
2324
use models\summit\ISummitAttendeeRepository;
@@ -124,20 +125,91 @@ public function build(Summit $summit, $ticket_criteria): ?ITicketFinderStrategy
124125

125126
try {
126127

127-
$fields = SummitAttendeeTicket::parseQRCode($qr_code_content);
128-
$prefix = $fields['prefix'];
129-
if ($summit->getTicketQRPrefix() != $prefix)
130-
throw new ValidationException
128+
// check first for encryption ...
129+
if(
130+
!str_starts_with($qr_code_content, $summit->getTicketQRPrefix()) &&
131+
!str_starts_with($qr_code_content, $summit->getBadgeQRPrefix()) &&
132+
$summit->hasQRCodesEncKey()){
133+
134+
Log::debug
135+
(
136+
sprintf
137+
(
138+
"TicketFinderStrategyFactory::build summit %s ticket_criteria %s using TicketFinderByQRCodeStrategy with encryption",
139+
$summit->getId(),
140+
$qr_code_content
141+
)
142+
);
143+
144+
$qr_code_content = AES::decrypt($summit->getQRCodesEncKey(), $qr_code_content)->getData();
145+
}
146+
147+
if(str_starts_with($qr_code_content, $summit->getTicketQRPrefix())) {
148+
Log::debug
149+
(
150+
sprintf
151+
(
152+
"TicketFinderStrategyFactory::build summit %s ticket_criteria %s using TicketFinderByQRCodeStrategy with ticket prefix",
153+
$summit->getId(),
154+
$qr_code_content
155+
)
156+
);
157+
158+
$fields = SummitAttendeeTicket::parseQRCode($qr_code_content);
159+
$prefix = $fields['prefix'];
160+
if ($summit->getTicketQRPrefix() != $prefix)
161+
throw new ValidationException
162+
(
163+
sprintf
164+
(
165+
"%s QR CODE is not valid for summit %s QR TICKET PREFIX %s",
166+
$qr_code_content,
167+
$summit->getId(),
168+
$summit->getTicketQRPrefix()
169+
)
170+
);
171+
}
172+
173+
if(str_starts_with($qr_code_content, $summit->getBadgeQRPrefix())){
174+
Log::debug
175+
(
176+
sprintf
177+
(
178+
"TicketFinderStrategyFactory::build summit %s ticket_criteria %s using TicketFinderByQRCodeStrategy with badge prefix",
179+
$summit->getId(),
180+
$qr_code_content
181+
)
182+
);
183+
184+
$fields = SummitAttendeeBadge::parseQRCode($qr_code_content);
185+
$prefix = $fields['prefix'];
186+
if ($summit->getBadgeQRPrefix() != $prefix)
187+
throw new ValidationException
188+
(
189+
sprintf
190+
(
191+
"%s QR CODE is not valid for summit %s QR BADGE PREFIX %s",
192+
$qr_code_content,
193+
$summit->getId(),
194+
$summit->getBadgeQRPrefix()
195+
)
196+
);
197+
}
198+
199+
if(!isset($fields['ticket_number'])) {
200+
Log::warning
131201
(
132202
sprintf
133203
(
134-
"%s QR CODE is not valid for summit %s QR PREFIX %s",
135-
$qr_code_content,
204+
"TicketFinderStrategyFactory::build summit %s ticket_criteria %s using TicketFinderByQRCodeStrategy ticket_number is missing",
136205
$summit->getId(),
137-
$summit->getTicketQRPrefix()
206+
$qr_code_content
138207
)
139208
);
140209

210+
throw new ValidationException("ticket_number is missing");
211+
}
212+
141213
$ticket_number = $fields['ticket_number'];
142214
Log::debug
143215
(

0 commit comments

Comments
 (0)