payfrit-api/api/auth/login.php
John Mizerek 1f81d98c52 Initial PHP API migration from CFML
Complete port of all 163 API endpoints from Lucee/CFML to PHP 8.3.
Shared helpers in api/helpers.php (DB, auth, request/response, security).
PDO prepared statements throughout. Same JSON response shapes as CFML.
2026-03-14 14:26:59 -07:00

50 lines
1.1 KiB
PHP

<?php
require_once __DIR__ . '/../helpers.php';
runAuth();
/*
POST: { "username": "...", "password": "..." }
Returns: { OK: true, ERROR: "", UserID: 123, FirstName: "...", Token: "..." }
*/
function normalizeUsername(string $u): string {
return str_replace([' ', '(', ')', '-'], '', trim($u));
}
$data = readJsonBody();
$username = normalizeUsername($data['username'] ?? '');
$password = $data['password'] ?? '';
if (empty($username) || empty($password)) {
apiAbort(['OK' => false, 'ERROR' => 'missing_fields']);
}
$row = queryOne(
"SELECT ID, FirstName
FROM Users
WHERE (EmailAddress = ? OR ContactNumber = ?)
AND Password = ?
AND IsEmailVerified = 1
AND IsContactVerified > 0
LIMIT 1",
[$username, $username, md5($password)]
);
if (!$row) {
apiAbort(['OK' => false, 'ERROR' => 'bad_credentials']);
}
$token = generateSecureToken();
queryTimed(
"INSERT INTO UserTokens (UserID, Token) VALUES (?, ?)",
[$row['ID'], $token]
);
jsonResponse([
'OK' => true,
'ERROR' => '',
'UserID' => (int) $row['ID'],
'FirstName' => $row['FirstName'],
'Token' => $token,
]);