'0x4AAAAAAARIYYLl4IlaAeS9Q40g-Y6QZ9M', 'response' => $token, 'remoteip' => $ip, ]; $options = [ 'http' => [ 'header' => 'Content-type: application/x-www-form-urlencoded', 'method' => 'POST', 'content' => http_build_query($data), ], ]; $context = stream_context_create($options); $result = file_get_contents($url, false, $context); if ($result !== false) { $outcome = json_decode($result, true); if (!isset($outcome['success']) || !$outcome['success']) { $response = [ 'success' => 'false', 'response' => 'Invalid captcha', ]; http_response_code(403); header('Content-Type: application/json'); die(json_encode($response)); } } else { $response = [ 'success' => 'false', 'response' => 'Unable to validate captcha', ]; http_response_code(500); header('Content-Type: application/json'); die(json_encode($response)); } $conn = new mysqli($dbservername, $dbusername, $dbpassword, $dbname); if ($conn->connect_error) { $response = [ 'success' => 'false', 'response' => 'Unable to access database', ]; http_response_code(500); header('Content-Type: application/json'); die(json_encode($response)); } $request_username = $_POST['username'] ?? ''; $request_displayname = (isset($_POST['displayname']) && !empty($_POST['displayname'])) ? $_POST['displayname'] : $request_username; $request_password = $_POST['password'] ?? ''; $request_email = $_POST['email'] ?? ''; if (empty($request_username) || empty($request_password) || empty($request_email)) { $response = [ 'success' => 'false', 'response' => 'Missing username, password or email', ]; http_response_code(400); die(json_encode($response)); } if (!ctype_alnum($request_username)) { $response = [ 'success' => 'false', 'response' => 'Username must be alphanumeric', ]; http_response_code(400); die(json_encode($response)); } if (!filter_var($request_email, FILTER_VALIDATE_EMAIL)) { $response = [ 'success' => 'false', 'response' => 'Invalid email', ]; http_response_code(400); die(json_encode($response)); } if (strlen($request_password) < 8 || !preg_match("/[A-Za-z]/", $request_password) || !preg_match("/[0-9]/", $request_password)) { $response = [ 'success' => 'false', 'response' => 'Password must be at least 8 characters long and contain at least one letter and one number', ]; http_response_code(400); die(json_encode($response)); } if (strlen($request_username) < 3 || strlen($request_username) > 32) { http_response_code(400); header('Content-Type: application/json'); die(json_encode(['success' => 'false', 'response' => 'Userame must be between 3 and 32 characters'])); exit; } if (strlen($request_displayname) < 3 || strlen($request_displayname) > 32) { http_response_code(400); header('Content-Type: application/json'); die(json_encode(['success' => 'false', 'response' => 'Display Name must be between 3 and 32 characters'])); exit; } function generateRandomString($length) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[random_int(0, strlen($characters) - 1)]; } return $randomString; } $hashed_password = password_hash($request_password, PASSWORD_DEFAULT); $stmt = $conn->prepare("SELECT * FROM users WHERE username = ? OR email = ?"); $stmt->bind_param("ss", $request_username, $request_email); $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { $response = [ 'success' => 'false', 'response' => 'Username or email already exists', ]; http_response_code(400); die(json_encode($response)); } else { $api_key = generateRandomString(32); $emailconfirm = generateRandomString(255); $emailcontent = ' Email Confirmation

Email Confirmation

Thank you for signing up with Xytriza\'s Uploading Service! We\'re excited to have you on board.

To complete the registration process, please click on the link below to confirm your email address:

Confirm Your Email

If you did not sign up for Xytriza\'s Uploading Service, please disregard this email and the account will be unregistered within 2 hours.

Thank you,
Xytriza\'s Uploading Service Team

'; $emailresult = true;//sendEmail($noreply_email_address, $noreply_email_password, $noreply_email_address, $request_email, $request_username, "Action Required: Confirm Your Email Address with Xytriza\'s Uploading Service", $emailcontent, true, 'smtp.ionos.com'); // will do soon (real) if (!$emailresult) { $response = [ 'success' => 'false', 'response' => 'Error sending conformation email, please try again later' ]; http_response_code(500); echo json_encode($response); } $stmt = $conn->prepare("INSERT INTO users (username, display_name, password, email, api_key, emailconfirm, register_time) VALUES (?, ?, ?, ?, ?, ?, ?)"); $stmt->bind_param("ssssssi", $request_username, $request_displayname, $hashed_password, $request_email, $api_key, $emailconfirm, time()); $stmt->execute(); $response = [ 'success' => 'true', 'response' => 'Account created successfully' ]; http_response_code(200); echo json_encode($response); } $stmt->close(); $conn->close(); ?>