built new web
This commit is contained in:
21
README.md
21
README.md
@@ -1,21 +0,0 @@
|
||||
## Библиотека для ширования подписи на WASM
|
||||
|
||||
Готовый шаблон тестов есть в example.html
|
||||
|
||||
Ваша задача фундаментально такая:
|
||||
1) сгенерировать подпись
|
||||
2) отправить подпись на эндпоинт нужным образом
|
||||
|
||||
|
||||
Как сгенерировать подпись?
|
||||
1) в метод get_secret_value сунуть:
|
||||
- user_agent (че угодно)
|
||||
- cur_time (время из эндпоинта https://api.id.hublab.ru/api/v1/server-timestamp )
|
||||
- url (на самом деле это path)
|
||||
|
||||
Формат подписи: набор букв и чисел. Если в результате будет что-то типа "Ошибка 95d19684-e70e-47f5-9341-94f5fd575d08", то значит
|
||||
что-то пошло не так. Отправить такую подпись вы можете, но бэк её не свалидирует и вернёт 401))
|
||||
|
||||
|
||||
|
||||
|
||||
55
example.html
55
example.html
@@ -1,55 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>WASM Example</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>WASM Example</h1>
|
||||
<div>
|
||||
<label for="userAgent">User Agent:</label>
|
||||
<input type="text" id="userAgent" placeholder="Например, Mozilla/5.0">
|
||||
</div>
|
||||
<div>
|
||||
<label for="url">URL:</label>
|
||||
<input type="text" id="url" placeholder="Например, http://example.com">
|
||||
</div>
|
||||
<button id="getSecretValue">Получить секретное значение</button>
|
||||
<p id="result"></p>
|
||||
|
||||
<script type="module">
|
||||
import init, { get_secret_value } from './hublib.js';
|
||||
|
||||
async function runWasm() {
|
||||
await init();
|
||||
|
||||
|
||||
document.getElementById('getSecretValue').addEventListener('click', async () => {
|
||||
const userAgent = document.getElementById('userAgent').value || navigator.userAgent;
|
||||
|
||||
|
||||
|
||||
const secretValue = get_secret_value(BigInt(Math.floor(Date.now() / 1000)), userAgent, url);
|
||||
|
||||
|
||||
document.getElementById('result').innerText = secretValue;
|
||||
|
||||
const txt = 'https://api.id.hublab.ru/api/v1/guestlogin?given_time=' +
|
||||
serverTs.timestamp +
|
||||
'&user_agent=' + userAgent +
|
||||
'&gotten_sign=' + secretValue;
|
||||
|
||||
const response1 = await makePostRequest(txt)
|
||||
|
||||
|
||||
document.getElementById('result-check').innerText = response1.ok;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
runWasm();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
3
nodejs/hublib.d.ts
vendored
Normal file
3
nodejs/hublib.d.ts
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
export function get_secret_value(given_time: bigint, user_agent: string, url: string): string;
|
||||
137
nodejs/hublib.js
Normal file
137
nodejs/hublib.js
Normal file
@@ -0,0 +1,137 @@
|
||||
|
||||
let imports = {};
|
||||
imports['__wbindgen_placeholder__'] = module.exports;
|
||||
let wasm;
|
||||
const { TextDecoder, TextEncoder } = require(`util`);
|
||||
|
||||
let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
|
||||
|
||||
cachedTextDecoder.decode();
|
||||
|
||||
let cachedUint8ArrayMemory0 = null;
|
||||
|
||||
function getUint8ArrayMemory0() {
|
||||
if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
|
||||
cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
|
||||
}
|
||||
return cachedUint8ArrayMemory0;
|
||||
}
|
||||
|
||||
function getStringFromWasm0(ptr, len) {
|
||||
ptr = ptr >>> 0;
|
||||
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
|
||||
}
|
||||
|
||||
let WASM_VECTOR_LEN = 0;
|
||||
|
||||
let cachedTextEncoder = new TextEncoder('utf-8');
|
||||
|
||||
const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
|
||||
? function (arg, view) {
|
||||
return cachedTextEncoder.encodeInto(arg, view);
|
||||
}
|
||||
: function (arg, view) {
|
||||
const buf = cachedTextEncoder.encode(arg);
|
||||
view.set(buf);
|
||||
return {
|
||||
read: arg.length,
|
||||
written: buf.length
|
||||
};
|
||||
});
|
||||
|
||||
function passStringToWasm0(arg, malloc, realloc) {
|
||||
|
||||
if (realloc === undefined) {
|
||||
const buf = cachedTextEncoder.encode(arg);
|
||||
const ptr = malloc(buf.length, 1) >>> 0;
|
||||
getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
|
||||
WASM_VECTOR_LEN = buf.length;
|
||||
return ptr;
|
||||
}
|
||||
|
||||
let len = arg.length;
|
||||
let ptr = malloc(len, 1) >>> 0;
|
||||
|
||||
const mem = getUint8ArrayMemory0();
|
||||
|
||||
let offset = 0;
|
||||
|
||||
for (; offset < len; offset++) {
|
||||
const code = arg.charCodeAt(offset);
|
||||
if (code > 0x7F) break;
|
||||
mem[ptr + offset] = code;
|
||||
}
|
||||
|
||||
if (offset !== len) {
|
||||
if (offset !== 0) {
|
||||
arg = arg.slice(offset);
|
||||
}
|
||||
ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
|
||||
const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
|
||||
const ret = encodeString(arg, view);
|
||||
|
||||
offset += ret.written;
|
||||
ptr = realloc(ptr, len, offset, 1) >>> 0;
|
||||
}
|
||||
|
||||
WASM_VECTOR_LEN = offset;
|
||||
return ptr;
|
||||
}
|
||||
/**
|
||||
* @param {bigint} given_time
|
||||
* @param {string} user_agent
|
||||
* @param {string} url
|
||||
* @returns {string}
|
||||
*/
|
||||
module.exports.get_secret_value = function(given_time, user_agent, url) {
|
||||
let deferred3_0;
|
||||
let deferred3_1;
|
||||
try {
|
||||
const ptr0 = passStringToWasm0(user_agent, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
const ptr1 = passStringToWasm0(url, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len1 = WASM_VECTOR_LEN;
|
||||
const ret = wasm.get_secret_value(given_time, ptr0, len0, ptr1, len1);
|
||||
deferred3_0 = ret[0];
|
||||
deferred3_1 = ret[1];
|
||||
return getStringFromWasm0(ret[0], ret[1]);
|
||||
} finally {
|
||||
wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports.__wbg_getTime_46267b1c24877e30 = function(arg0) {
|
||||
const ret = arg0.getTime();
|
||||
return ret;
|
||||
};
|
||||
|
||||
module.exports.__wbg_new0_f788a2397c7ca929 = function() {
|
||||
const ret = new Date();
|
||||
return ret;
|
||||
};
|
||||
|
||||
module.exports.__wbindgen_init_externref_table = function() {
|
||||
const table = wasm.__wbindgen_export_0;
|
||||
const offset = table.grow(4);
|
||||
table.set(0, undefined);
|
||||
table.set(offset + 0, undefined);
|
||||
table.set(offset + 1, null);
|
||||
table.set(offset + 2, true);
|
||||
table.set(offset + 3, false);
|
||||
;
|
||||
};
|
||||
|
||||
module.exports.__wbindgen_throw = function(arg0, arg1) {
|
||||
throw new Error(getStringFromWasm0(arg0, arg1));
|
||||
};
|
||||
|
||||
const path = require('path').join(__dirname, 'hublib_bg.wasm');
|
||||
const bytes = require('fs').readFileSync(path);
|
||||
|
||||
const wasmModule = new WebAssembly.Module(bytes);
|
||||
const wasmInstance = new WebAssembly.Instance(wasmModule, imports);
|
||||
wasm = wasmInstance.exports;
|
||||
module.exports.__wasm = wasm;
|
||||
|
||||
wasm.__wbindgen_start();
|
||||
|
||||
BIN
nodejs/hublib_bg.wasm
Normal file
BIN
nodejs/hublib_bg.wasm
Normal file
Binary file not shown.
11
nodejs/package.json
Normal file
11
nodejs/package.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "hublib",
|
||||
"version": "0.1.0",
|
||||
"files": [
|
||||
"hublib_bg.wasm",
|
||||
"hublib.js",
|
||||
"hublib.d.ts"
|
||||
],
|
||||
"main": "hublib.js",
|
||||
"types": "hublib.d.ts"
|
||||
}
|
||||
70
web/example.html
Normal file
70
web/example.html
Normal file
@@ -0,0 +1,70 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>WASM Example</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>WASM Example</h1>
|
||||
<div>
|
||||
<label for="userAgent">User Agent:</label>
|
||||
<input type="text" id="userAgent" placeholder="Например, Mozilla/5.0">
|
||||
</div>
|
||||
<div>
|
||||
<label for="url">URL:</label>
|
||||
<input type="text" id="url" placeholder="Например, http://example.com">
|
||||
</div>
|
||||
<button id="getSecretValue">Получить секретное значение</button>
|
||||
<p id="result"></p>
|
||||
|
||||
<script type="module">
|
||||
import init, { get_secret_value } from './hublib.js';
|
||||
|
||||
async function runWasm() {
|
||||
await init();
|
||||
|
||||
|
||||
document.getElementById('getSecretValue').addEventListener('click', async () => {
|
||||
const userAgent = document.getElementById('userAgent').value || navigator.userAgent;
|
||||
|
||||
const secretValue = get_secret_value(BigInt(Math.floor(Date.now() / 1000)), userAgent, url);
|
||||
|
||||
|
||||
|
||||
document.getElementById('result').innerText = secretValue;
|
||||
|
||||
// const txt = 'https://api.id.hublab.ru/api/v1/guestlogin?given_time=' +
|
||||
// serverTs.timestamp +
|
||||
// '&user_agent=' + userAgent +
|
||||
// '&gotten_sign=' + secretValue;
|
||||
|
||||
//const response1 = await makePostRequest(txt)
|
||||
|
||||
});
|
||||
}
|
||||
// async function makePostRequest(url) {
|
||||
// try {
|
||||
// const response = await fetch(url, {
|
||||
// method: 'POST',
|
||||
// headers: {
|
||||
// 'Content-Type': 'application/json', // Указываем, что отправляем данные в формате JSON
|
||||
// },
|
||||
// });
|
||||
// if (!response.ok) {
|
||||
// throw new Error(`HTTP error! Статус: ${response.status}`);
|
||||
// }
|
||||
// const responseData = await response.json(); // Получаем ответ как JSON
|
||||
// return responseData; // Возвращаем полученные данные
|
||||
// } catch (error) {
|
||||
// console.error('Ошибка при выполнении POST-запроса:', error);
|
||||
// throw error; // Пробрасываем ошибку дальше
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
runWasm();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
0
hublib.d.ts → web/hublib.d.ts
vendored
0
hublib.d.ts → web/hublib.d.ts
vendored
70
web/hublib_bg.wasm.d.ts
vendored
Normal file
70
web/hublib_bg.wasm.d.ts
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
export const memory: WebAssembly.Memory;
|
||||
export const ffi_hublib_uniffi_contract_version: () => number;
|
||||
export const ffi_hublib_rustbuffer_alloc: (a: number, b: bigint, c: number) => void;
|
||||
export const ffi_hublib_rustbuffer_from_bytes: (a: number, b: number, c: number, d: number) => void;
|
||||
export const ffi_hublib_rustbuffer_free: (a: bigint, b: bigint, c: number, d: number, e: number) => void;
|
||||
export const ffi_hublib_rustbuffer_reserve: (a: number, b: bigint, c: bigint, d: number, e: number, f: bigint, g: number) => void;
|
||||
export const ffi_hublib_rust_future_poll_u8: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_u8: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_u8: (a: bigint, b: number) => number;
|
||||
export const ffi_hublib_rust_future_free_u8: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_poll_i8: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_i8: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_i8: (a: bigint, b: number) => number;
|
||||
export const ffi_hublib_rust_future_free_i8: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_poll_u16: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_u16: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_u16: (a: bigint, b: number) => number;
|
||||
export const ffi_hublib_rust_future_free_u16: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_poll_i16: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_i16: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_i16: (a: bigint, b: number) => number;
|
||||
export const ffi_hublib_rust_future_free_i16: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_poll_u32: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_u32: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_u32: (a: bigint, b: number) => number;
|
||||
export const ffi_hublib_rust_future_free_u32: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_poll_i32: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_i32: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_i32: (a: bigint, b: number) => number;
|
||||
export const ffi_hublib_rust_future_free_i32: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_poll_u64: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_u64: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_u64: (a: bigint, b: number) => bigint;
|
||||
export const ffi_hublib_rust_future_free_u64: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_poll_i64: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_i64: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_i64: (a: bigint, b: number) => bigint;
|
||||
export const ffi_hublib_rust_future_free_i64: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_poll_f32: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_f32: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_f32: (a: bigint, b: number) => number;
|
||||
export const ffi_hublib_rust_future_free_f32: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_poll_f64: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_f64: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_f64: (a: bigint, b: number) => number;
|
||||
export const ffi_hublib_rust_future_free_f64: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_poll_pointer: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_pointer: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_pointer: (a: bigint, b: number) => number;
|
||||
export const ffi_hublib_rust_future_free_pointer: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_poll_rust_buffer: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_rust_buffer: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_rust_buffer: (a: number, b: bigint, c: number) => void;
|
||||
export const ffi_hublib_rust_future_free_rust_buffer: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_poll_void: (a: bigint, b: number, c: bigint) => void;
|
||||
export const ffi_hublib_rust_future_cancel_void: (a: bigint) => void;
|
||||
export const ffi_hublib_rust_future_complete_void: (a: bigint, b: number) => void;
|
||||
export const ffi_hublib_rust_future_free_void: (a: bigint) => void;
|
||||
export const uniffi_hublib_fn_func_get_secret_value: (a: number, b: bigint, c: bigint, d: bigint, e: number, f: number, g: bigint, h: bigint, i: number, j: number, k: number) => void;
|
||||
export const uniffi_hublib_checksum_func_get_secret_value: () => number;
|
||||
export const get_secret_value: (a: bigint, b: number, c: number, d: number, e: number) => [number, number];
|
||||
export const uniffi_hublib_fn_func_recreate_secret_value: (a: number, b: bigint, c: bigint, d: bigint, e: number, f: number, g: bigint, h: bigint, i: number, j: number, k: bigint, l: bigint, m: number, n: number, o: number) => void;
|
||||
export const uniffi_hublib_checksum_func_recreate_secret_value: () => number;
|
||||
export const __wbindgen_export_0: WebAssembly.Table;
|
||||
export const __wbindgen_malloc: (a: number, b: number) => number;
|
||||
export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
|
||||
export const __wbindgen_free: (a: number, b: number, c: number) => void;
|
||||
export const __wbindgen_start: () => void;
|
||||
Reference in New Issue
Block a user