fix: infinity scroll, init data in base64
This commit is contained in:
@@ -19,7 +19,7 @@ class SignatureValidator
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$initDataString = rawurldecode($request->header('X-Telegram-Initdata'));
|
$initDataString = base64_decode($request->header('X-Telegram-Initdata'));
|
||||||
|
|
||||||
if (! $initDataString) {
|
if (! $initDataString) {
|
||||||
throw new TelegramInvalidSignatureException('Invalid Telegram signature!');
|
throw new TelegramInvalidSignatureException('Invalid Telegram signature!');
|
||||||
@@ -78,13 +78,4 @@ class SignatureValidator
|
|||||||
|
|
||||||
return implode(PHP_EOL, $array);
|
return implode(PHP_EOL, $array);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function ensureUserWantsToReceiveMessages($request): void
|
|
||||||
{
|
|
||||||
$initDataString = rawurldecode($request->header('X-Telegram-Initdata'));
|
|
||||||
|
|
||||||
if (! $initDataString) {
|
|
||||||
throw new TelegramInvalidSignatureException('Invalid Telegram signature!');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,6 @@
|
|||||||
namespace Openguru\OpenCartFramework\Telegram;
|
namespace Openguru\OpenCartFramework\Telegram;
|
||||||
|
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
use JsonException;
|
|
||||||
use Openguru\OpenCartFramework\Application;
|
|
||||||
use Openguru\OpenCartFramework\Http\Request;
|
|
||||||
use Openguru\OpenCartFramework\Logger\Logger;
|
use Openguru\OpenCartFramework\Logger\Logger;
|
||||||
|
|
||||||
class TelegramService
|
class TelegramService
|
||||||
@@ -68,29 +65,4 @@ class TelegramService
|
|||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function ensureUserWantsToReceiveMessages(): bool
|
|
||||||
{
|
|
||||||
/** @var Request $request */
|
|
||||||
$request = Application::getInstance()->get(Request::class);
|
|
||||||
|
|
||||||
$initDataString = $request->header('X-Telegram-Initdata');
|
|
||||||
|
|
||||||
if (! $initDataString) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
parse_str($initDataString, $initData);
|
|
||||||
if (! isset($initData['user'])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$user = json_decode($initData['user'], true, 512, JSON_THROW_ON_ERROR);
|
|
||||||
return ! empty($user['allows_write_to_pm']);
|
|
||||||
} catch (JsonException $e) {
|
|
||||||
$this->logger->logException($e);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
<h3 class="mt-4 text-sm">{{ product.name }}</h3>
|
<h3 class="mt-4 text-sm">{{ product.name }}</h3>
|
||||||
<p class="mt-1 text-lg font-medium">{{ product.price }}</p>
|
<p class="mt-1 text-lg font-medium">{{ product.price }}</p>
|
||||||
</RouterLink>
|
</RouterLink>
|
||||||
|
<div ref="bottom" style="height: 1px;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="productsStore.isLoading" class="text-center mt-5">
|
<div v-if="productsStore.isLoading" class="text-center mt-5">
|
||||||
@@ -57,6 +58,7 @@ const route = useRoute();
|
|||||||
const categoryId = route.params.category_id ?? null;
|
const categoryId = route.params.category_id ?? null;
|
||||||
const productsStore = useProductsStore();
|
const productsStore = useProductsStore();
|
||||||
const settings = useSettingsStore();
|
const settings = useSettingsStore();
|
||||||
|
const bottom = ref(null);
|
||||||
|
|
||||||
function haptic() {
|
function haptic() {
|
||||||
window.Telegram.WebApp.HapticFeedback.selectionChanged();
|
window.Telegram.WebApp.HapticFeedback.selectionChanged();
|
||||||
@@ -89,9 +91,9 @@ async function loadMore() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
useInfiniteScroll(
|
useInfiniteScroll(
|
||||||
window,
|
bottom,
|
||||||
loadMore,
|
loadMore,
|
||||||
{distance: 500}
|
{distance: 1000}
|
||||||
)
|
)
|
||||||
|
|
||||||
watch(() => route.params.id, async newId => {
|
watch(() => route.params.id, async newId => {
|
||||||
|
|||||||
@@ -2,15 +2,20 @@ import {ofetch} from "ofetch";
|
|||||||
|
|
||||||
const BASE_URL = '/';
|
const BASE_URL = '/';
|
||||||
|
|
||||||
|
function encodeBase64Unicode(str) {
|
||||||
|
return btoa(new TextEncoder().encode(str).reduce((data, byte) => data + String.fromCharCode(byte), ''));
|
||||||
|
}
|
||||||
|
|
||||||
export const apiFetch = ofetch.create({
|
export const apiFetch = ofetch.create({
|
||||||
throwHttpErrors: true,
|
throwHttpErrors: true,
|
||||||
onRequest({request, options}) {
|
onRequest({request, options}) {
|
||||||
const data = window.Telegram?.WebApp?.initData;
|
const data = window.Telegram?.WebApp?.initData;
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
|
const encoded = encodeBase64Unicode(data);
|
||||||
options.headers = {
|
options.headers = {
|
||||||
...options.headers,
|
...options.headers,
|
||||||
'X-Telegram-InitData': data,
|
'X-Telegram-InitData': encoded,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user