Compare commits

..

9 Commits
main ... 185

47 changed files with 546 additions and 138 deletions

Binary file not shown.

View File

@ -13,10 +13,10 @@ sys.path.insert(0, project_root)
# print(db_price)
# download_products()
download_products()
download_prices()
decrypt_and_unpack("prices")
# decrypt_and_unpack("products")
# add_product()
decrypt_and_unpack("products")
add_product()
update_prices()

View File

@ -4,6 +4,7 @@ load_dotenv()
import sqlite3
import requests
conn = sqlite3.connect("./files/rokky.db")
partner = os.getenv('partner')
user_name = os.getenv('userName')
@ -25,14 +26,15 @@ json_data = {
def tokens():
response = requests.post('https://partner.rokky.com/api/v1/tokens', headers=headers, json=json_data)
# print(response.json())
print(response.json())
data = response.json()
access_token = data["accessToken"]
return access_token
# access_token = tokens()
def get_orders(access_token, page=1, page_size=25):
def get_orders(page=1, page_size=25):
access_token = tokens()
url = f"{BASE_URL}/orders"
headers = {
@ -82,6 +84,7 @@ def download_prices():
def create_order(sku, unit_price, partner_order_id):
# try:
access_token = tokens()
conn = sqlite3.connect("./files/rokky.db")
cursor = conn.cursor()
url = f"{BASE_URL}/orders"
@ -99,7 +102,7 @@ def create_order(sku, unit_price, partner_order_id):
"unitPrice": float(unit_price)
}
],
"partnerOrderId": f"my-orders{partner_order_id}"
"partnerOrderId": partner_order_id
}
try:
@ -142,6 +145,7 @@ def create_order(sku, unit_price, partner_order_id):
# return response.json()
def get_orders(page=1, page_size=25):
access_token = tokens()
url = f"{BASE_URL}/orders"
headers = {
@ -161,6 +165,7 @@ def get_orders(page=1, page_size=25):
def get_order_content(order_id):
access_token = tokens()
conn = sqlite3.connect("./files/rokky.db")
cursor = conn.cursor()
@ -191,14 +196,14 @@ def get_order_content(order_id):
return content
# content = get_order_content(5388720)
# content = get_order_content(5390872)
# print(content)
# orders = get_orders()
# print(orders)
# order = create_order(22785, 22.63, "my-test-order-122w3")
# order = create_order(2197, 0.13, "sss22289522")
# print(order)

View File

@ -16,6 +16,42 @@ password = os.getenv('password')
conn = sqlite3.connect("./files/rokky.db")
def update_prices():
with open("./files/prices.json", "r") as f:
prices = json.load(f)
conn = sqlite3.connect("./files/rokky.db")
cursor = conn.cursor()
data = []
for item in prices:
sku = item["sku"]
price = item.get("price")
price_gg = item.get("baseSuggestedRetailPrice")
price_sales = item.get("discountPercentage")
is_sale = item.get("isSale")
data.append((
price,
price_gg,
price_sales,
is_sale,
sku,
))
cursor.executemany("""
UPDATE products
SET
price = ?,
price_gg = ?,
price_sales = ?,
insale = ?
WHERE sku = ?
""", data)
print("Обновил цены")
conn.commit()
def decrypt_file(input_file, output_file, password):
with open(input_file, "rb") as f:
encrypted = f.read()
@ -56,8 +92,10 @@ def decrypt_and_unpack(name):
with gzip.open(gz, "rb") as f_in:
with open(json_file, "wb") as f_out:
shutil.copyfileobj(f_in, f_out)
print(f"Готово: {json_file}")
@ -94,6 +132,7 @@ def get_genres(product):
def save_product(conn, product):
conn = sqlite3.connect("./files/rokky.db")
cursor = conn.cursor()
cursor.execute("""
@ -164,41 +203,9 @@ def add_product():
def update_prices():
with open("./files/prices.json", "r") as f:
prices = json.load(f)
cursor = conn.cursor()
data = []
for item in prices:
sku = item["sku"]
price = item.get("price")
price_gg = item.get("baseSuggestedRetailPrice")
price_sales =item.get("discountPercentage")
is_sale = item.get("isSale")
data.append((
price,
price_gg,
price_sales,
is_sale,
sku
))
cursor.executemany("""
UPDATE products
SET
price = ?,
price_gg = ?,
price_sales = ?,
insale = ?
WHERE sku = ?
""", data)
conn.commit()
# decrypt_and_unpack("prices")
# decrypt_and_unpack("products")
# add_product()
# update_prices()
update_prices()

2
API/ww
View File

@ -1 +1 @@
id_i=34534345435&id_d=102180432&amount=33&curr=USD&date=2026-03-20T10:43:09+03:00&email=rusinowdima2@yandex.ru&sha256=5110eb4a7aa7c60d66f9648db40027f241c52673a6a7c9a136e27a02fd1711fb&ip={IP}&isMyProduct=true
5110eb4a7aa7c60d66f9648db40027f241c52673a6a7c9a136e2a02fd1711fb&amount=1.0&currency=RUB&date=2026-03-20T10=43=09+03=00&email=rusinowdima2@yandex.ru&id_d=102180432&id_i=21327450&ip=188.32.208.151&is_my_product=true

View File

@ -1,29 +1,29 @@
FROM python:3.12-slim-bookworm
# The installer requires curl (and certificates) to download the release archive
RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates nano
# Download the latest installer
ADD https://astral.sh/uv/install.sh /uv-installer.sh
# Run the installer then remove it
RUN sh /uv-installer.sh && rm /uv-installer.sh
# Ensure the installed binary is on the `PATH`
ENV PATH="/root/.local/bin/:$PATH"
# Copy the project into the image
ADD . /app
# Sync the project into a new environment, using the frozen lockfile
WORKDIR /app
RUN uv sync --frozen
# Expose port 8000
EXPOSE 5205
# Presuming there is a `my_app` command provided by the project uvicorn main:app --reload
FROM python:3.12-slim-bookworm
# The installer requires curl (and certificates) to download the release archive
RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates nano
# Download the latest installer
ADD https://astral.sh/uv/install.sh /uv-installer.sh
# Run the installer then remove it
RUN sh /uv-installer.sh && rm /uv-installer.sh
# Ensure the installed binary is on the `PATH`
ENV PATH="/root/.local/bin/:$PATH"
# Copy the project into the image
ADD . /app
# Sync the project into a new environment, using the frozen lockfile
WORKDIR /app
RUN uv sync --frozen
# Expose port 8000
EXPOSE 5205
# Presuming there is a `my_app` command provided by the project uvicorn main:app --reload
CMD ["uv", "run", "main.py"]

View File

@ -4,11 +4,12 @@ import os
import sqlite3
import json
# from services.rokky import ones
from API.rok import create_order, get_order_content
from API.rok import create_order, get_order_content, get_orders
from API.TG import send_telegram
from services.orders import get_sku
from services.gg import get_product, create_messagea
from services.send_mai import send_html_flow
# from services.orders_rokky import rok_orders
import logging
@ -21,7 +22,9 @@ IMAGE_FOLDER = os.path.join(BASE_DIR, 'images')
@main.route("/")
def index():
return "Hello wstkeys!!!"
print(get_orders())
return "Hello wstkeys! Hello1"
@main.route("/images/<filename>")
def get_image(filename):
@ -45,7 +48,7 @@ def index1():
content = json.dumps(params, ensure_ascii=False)
send_telegram(content)
message = f"🔹Спасибо за покупку в WST Keys (West Store Trusted Keys)\n\n ⏳ Ваш заказ обрабатывается и будет доставлен автоматически"
message = f"🔹 Спасибо за покупку в WST Keys (West Store Trusted Keys)\n\n⏳ Ваш заказ обрабатывается и будет доставлен автоматически"
create_messagea(id_i, message)
#
sku_rokky, price_rokky = get_sku(id_d)
@ -70,6 +73,7 @@ def index1():
return jsonify({"error": str(e)}), 500
conn.close()
send_telegram(create_order(sku_rokky, price_rokky, id_i))
return jsonify({"success": True}), 200
@ -97,7 +101,7 @@ def new_order():
send_telegram(order_id)
logging.warn(f"newOrder: {order_id}")
get_order_content(order_id)
# get_order_content(int(order_id))
send_html_flow(order_id)
@ -133,7 +137,7 @@ def sku():
def product_update():
# получаем параметры
sku = request.args.get("rokky")
ggsale = request.args.get("ggsale")
ggsale = request.args.get("ggsel")
if not sku or not ggsale:
return jsonify({"error": "Missing parameters"}), 400

View File

@ -12,33 +12,26 @@ services:
- ./nginx/certbot/conf:/etc/letsencrypt
extra_hosts:
- "host.docker.internal:host-gateway"
depends_on:
- web
restart: always
wg-client:
image: ghcr.io/linuxserver/wireguard
container_name: wg-client
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Amsterdam
volumes:
- ./wg:/config # сюда кладём ./wg/wg_confs/wg0.conf
restart: always
web:
build: .
container_name: flask-dev
privileged: true # ✅ Даёт все права
ports:
- "5205:5205" # Пробрасываем порт наружу
volumes:
# Главная строка: монтируем текущую папку с кодом (.)
# в папку /app внутри контейнера
- .:/app
environment:
- FLASK_DEBUG=1
- PYTHONUNBUFFERED=1
network_mode: "service:wg-client" # весь трафик Flask через VPN
depends_on:
- wg-client
restart: always
- FLASK_DEBUG=1 # Дополнительная страховка для включения дебага
- PYTHONUNBUFFERED=1 # Чтобы логи выводились сразу, а не кэшировались
- eKCPpyzkcCTS=${eKCPpyzkcCTS:-}
restart: always
cap_add:
- NET_ADMIN
- SYS_MODULE
devices:
- /dev/net/tun:/dev/net/tun
depends_on: []

9
models/del_s.py Normal file
View File

@ -0,0 +1,9 @@
import sqlite3
conn = sqlite3.connect("./files/rokky.db")
cursor = conn.cursor()
cursor.execute("DROP TABLE IF EXISTS orders")
conn.commit()
conn.close()

View File

@ -0,0 +1 @@
{"creation_dt": "2026-03-19T08:29:34Z", "creation_host": "c9d15910341c"}

View File

@ -0,0 +1 @@
{"n": "yBq2Uju0sDvIcExzaLnTOt-Kf0lyH8lUhTZ1qS7bOSS2mUiFySawp0ONluxJmeyq1oNoMEKb_TS3047fh6argtGL9Ty5LziCrUHsSPzsJeEK7viMu7bjVRjpPRyRk-TggK0H1NLObKkyNlOWDA8wWbFvNcoddhzvpeMeVMFy1jpBYXDTJc8GvPgv0ubs2zTaYplu6ru9TWNd8QkESdhm6DH_iU1Ph4ALtPRIIbF43xi8GHlSYnbDTKqVNph-i0tIymXCbIMvR-dNMsjA4VuoQeiu9-lKEAT1ytapKshTzOl9cIPpbD3e_70tx5BKtL1L-o3rn4g2zNuWpEPgBhQJ4w", "e": "AQAB", "d": "Eh0c6Pe_pP5caBH7lnzPyrIGmvweiRMUBBUIdJ6puJQCtYBzn-BROGrsi79q8DSUyGNP0KKO9U5K36s8v85OE0L9vN7Y0pX2elGP3pGKnOkwsK4uKyXkkUT2hBIseWtMCUngfhrxFbQBOBq75-6ODWh67S8VGKaI6QbUrY5vY0XsocU4fARL2WihenO9Rajkz0MbvEzRePksAySKelJYLbR8h7I5PX0WxuJaekkzaGf1XeboWCCxZ_DVcwEBp9xGeignLmCrKNkwta6hqRCB5vgIyCUoybuyjr95tSYuC5iN-LDFN2rzg0T4xNw2Z8dxuyah5mpw75G-umo0WRhAaQ", "p": "9Dx8RANkz70StHJEKuLXN-ElexVnOHwXVjGACp97sSykY_3GdE7cHO2iz9HYibH1oyS7ycvzkfJPbFwoZ4gM2k7EM6mQgDB9M76sHDjzzBDAZAQVyNNrW5DH1H3rtMcRFc2ZWX5knY8sdKP5g5QvsQCdI0eS5p_RaWHDxi03qAs", "q": "0b4Qv39qzZz-GuhGbI4Np1T8-26arCNduSeSkkdmgWMQBlaymACt7ryRV1DrItisLhTC8EJoSTXWy5C8ZcVjZfwh67A0cjmC2DwQapaTnilvl0JdmDLDDyDVhtLMIPEmSqCpcx3vORoRSxY2beOQaOpu6gAK6s-mlyXvxG-m1Ik", "dp": "kKTlv233HWTPmBh4MKHpbgmkJfH2EKjFNWHZf_EV00cqEKHyD13I1EUUgFm6EUpYvIb7xDZKiSvlR7qIn1AetIejgSkyEAknjSamTYyZLkjZeCJHOImlcjQbdMgieQzQHIaIBE1rjziEzotyMS_o0r4XUhaIdJc_8VZaGJsc9CM", "dq": "FUAckkpml86AMFm4SOdbmsiRmSfro-UxacEIqKlzSUiwJvRBxATNmpKgZyhbqnwpdcHEvnL7_e7mhFl1vRnyqDKTfT2tEqWhDCeJwkLfUfcAx2KB-RmriazZ9X8GD5BfQNBmWrN9uVtaxTDK8vdLelXGRw8aDBBd4JKHaG-nh4E", "qi": "A8sTN4oiNeWkKX-rWr1LGJ_VfvCX4nBQ_Psa24HWJnWk6ATNcnf8otZCXAssNeb-vwBrBqy09C5ynX8k3w1OBcWKh12mBezhUPvPAHfeazfGNZTPYKDpn80uTsd0RZaDvmisJW6Obwh9Thorqkstnc2VypPUom66mx-fMjgF90M", "kty": "RSA"}

View File

@ -0,0 +1 @@
{"body": {}, "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/3159531281"}

View File

@ -0,0 +1,21 @@
-----BEGIN CERTIFICATE-----
MIIDizCCAxGgAwIBAgISBRYz4Bp7cHMTbq0c38ztlZeeMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NzAeFw0yNjAzMTkwNzMyNDVaFw0yNjA2MTcwNzMyNDRaMBYxFDASBgNVBAMTC3dz
dGtleXMudG9wMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEryQBD4A2GWx5ULjC
MVzq3ZWtNPs+pn7MJdxMDrow8iUGXwziGnx/wxBpbclZX/YpMNEI3P0bz3EYY/AA
FqS93KOCAiEwggIdMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcD
ATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSQJvBEWpjHj8hKAPwf0c+cs46v3DAf
BgNVHSMEGDAWgBSuSJ7chx1EoG/aouVgdAR4wpwAgDAyBggrBgEFBQcBAQQmMCQw
IgYIKwYBBQUHMAKGFmh0dHA6Ly9lNy5pLmxlbmNyLm9yZy8wJwYDVR0RBCAwHoIL
d3N0a2V5cy50b3CCD3d3dy53c3RrZXlzLnRvcDATBgNVHSAEDDAKMAgGBmeBDAEC
ATAtBgNVHR8EJjAkMCKgIKAehhxodHRwOi8vZTcuYy5sZW5jci5vcmcvMzEuY3Js
MIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHYAyzj3FYl8hKFEX1vB3fvJbvKaWc1H
CmkFhbDLFMMUWOcAAAGdBThnlAAABAMARzBFAiAjcv9Q+47Trx1Fe7suICYtcGOo
6djSjFXh/D1GYMEs0AIhAOGS/AK6bbruaDxI6andmUmT5xOp74iEb2ruMiXL/Syu
AHcADleUvPOuqT4zGyyZB7P3kN+bwj1xMiXdIaklrGHFTiEAAAGdBThngwAABAMA
SDBGAiEA+w9/Fhyj/90p6oZwHueRBNBy3J9bPw3iV9GRDihRhMoCIQDsajI6Rqw/
aAwKk973OcO5AMrscxas1srtCAy91UUz4jAKBggqhkjOPQQDAwNoADBlAjEAzkMS
iMiP9sxr4EIizawwqDCN/8JAI4tezI0ApN4RLZOjHPbi7enMKmR3MAs/NfZzAjBG
LqlZPyjCJGtH6Mhrlit600hhdwO5xy0NEYtwfduqZ27uEYoA+evnixMohcEL5VA=
-----END CERTIFICATE-----

View File

@ -0,0 +1,21 @@
-----BEGIN CERTIFICATE-----
MIIDijCCAw+gAwIBAgISBkwIWOQucqJm2bNjQTqXfH08MAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NzAeFw0yNjAzMTkwNzM0NDVaFw0yNjA2MTcwNzM0NDRaMBYxFDASBgNVBAMTC3dz
dGtleXMudG9wMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECLsDi9ZXQt5hZbjc
TKJYPY/kIdDAMgCqnrt4tV78AnGf+xIolYA96sPc+RRDQWoHgpT3e++wHxqNDkT5
wBaegaOCAh8wggIbMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcD
ATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQxgifvZUFsI6vK/RxK5tZImjRkijAf
BgNVHSMEGDAWgBSuSJ7chx1EoG/aouVgdAR4wpwAgDAyBggrBgEFBQcBAQQmMCQw
IgYIKwYBBQUHMAKGFmh0dHA6Ly9lNy5pLmxlbmNyLm9yZy8wJwYDVR0RBCAwHoIL
d3N0a2V5cy50b3CCD3d3dy53c3RrZXlzLnRvcDATBgNVHSAEDDAKMAgGBmeBDAEC
ATAtBgNVHR8EJjAkMCKgIKAehhxodHRwOi8vZTcuYy5sZW5jci5vcmcvNjEuY3Js
MIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHUAlpdkv1VYl633Q4doNwhCd+nwOtX2
pPM2bkakPw/KqcYAAAGdBTo6vAAABAMARjBEAiBPmlA/U/CZOVdw/3rJN3hH9+jA
TBihCfnrSMdNC1xWQAIgNE1FOpS2PURTh8jP6Tu8jytR1x9X2g986d4reUyMqEwA
dgDRbqmlaAd+ZjWgPzel3bwDpTxBEhTUiBj16TGzI8uVBAAAAZ0FOjtiAAAEAwBH
MEUCIQCFS+VZqF0mkieuw5YkmxJcC7pq5Gr6KxDs3pq44hfbfAIgFkQYYNoTOLBJ
Cbrzz4sVB40E06n+rfKFZ/k5fCz/FS4wCgYIKoZIzj0EAwMDaQAwZgIxAL5J/AeW
g+PSdeF3Ndfp5TTl1lzFcAxFMgm68jlk4eAC+I4u9ZYyhKxpeNIonG6utgIxAPCF
LEvxoUCvlUIbmFV6xk+MQn6/FKuaYyRMBHObM5hsSZI7DkH44RRM2/9DIWX6bw==
-----END CERTIFICATE-----

View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
+VUwFj9tmWxyR/M=
-----END CERTIFICATE-----

View File

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
+VUwFj9tmWxyR/M=
-----END CERTIFICATE-----

View File

@ -0,0 +1,47 @@
-----BEGIN CERTIFICATE-----
MIIDizCCAxGgAwIBAgISBRYz4Bp7cHMTbq0c38ztlZeeMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NzAeFw0yNjAzMTkwNzMyNDVaFw0yNjA2MTcwNzMyNDRaMBYxFDASBgNVBAMTC3dz
dGtleXMudG9wMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEryQBD4A2GWx5ULjC
MVzq3ZWtNPs+pn7MJdxMDrow8iUGXwziGnx/wxBpbclZX/YpMNEI3P0bz3EYY/AA
FqS93KOCAiEwggIdMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcD
ATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSQJvBEWpjHj8hKAPwf0c+cs46v3DAf
BgNVHSMEGDAWgBSuSJ7chx1EoG/aouVgdAR4wpwAgDAyBggrBgEFBQcBAQQmMCQw
IgYIKwYBBQUHMAKGFmh0dHA6Ly9lNy5pLmxlbmNyLm9yZy8wJwYDVR0RBCAwHoIL
d3N0a2V5cy50b3CCD3d3dy53c3RrZXlzLnRvcDATBgNVHSAEDDAKMAgGBmeBDAEC
ATAtBgNVHR8EJjAkMCKgIKAehhxodHRwOi8vZTcuYy5sZW5jci5vcmcvMzEuY3Js
MIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHYAyzj3FYl8hKFEX1vB3fvJbvKaWc1H
CmkFhbDLFMMUWOcAAAGdBThnlAAABAMARzBFAiAjcv9Q+47Trx1Fe7suICYtcGOo
6djSjFXh/D1GYMEs0AIhAOGS/AK6bbruaDxI6andmUmT5xOp74iEb2ruMiXL/Syu
AHcADleUvPOuqT4zGyyZB7P3kN+bwj1xMiXdIaklrGHFTiEAAAGdBThngwAABAMA
SDBGAiEA+w9/Fhyj/90p6oZwHueRBNBy3J9bPw3iV9GRDihRhMoCIQDsajI6Rqw/
aAwKk973OcO5AMrscxas1srtCAy91UUz4jAKBggqhkjOPQQDAwNoADBlAjEAzkMS
iMiP9sxr4EIizawwqDCN/8JAI4tezI0ApN4RLZOjHPbi7enMKmR3MAs/NfZzAjBG
LqlZPyjCJGtH6Mhrlit600hhdwO5xy0NEYtwfduqZ27uEYoA+evnixMohcEL5VA=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
+VUwFj9tmWxyR/M=
-----END CERTIFICATE-----

View File

@ -0,0 +1,47 @@
-----BEGIN CERTIFICATE-----
MIIDijCCAw+gAwIBAgISBkwIWOQucqJm2bNjQTqXfH08MAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NzAeFw0yNjAzMTkwNzM0NDVaFw0yNjA2MTcwNzM0NDRaMBYxFDASBgNVBAMTC3dz
dGtleXMudG9wMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECLsDi9ZXQt5hZbjc
TKJYPY/kIdDAMgCqnrt4tV78AnGf+xIolYA96sPc+RRDQWoHgpT3e++wHxqNDkT5
wBaegaOCAh8wggIbMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcD
ATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQxgifvZUFsI6vK/RxK5tZImjRkijAf
BgNVHSMEGDAWgBSuSJ7chx1EoG/aouVgdAR4wpwAgDAyBggrBgEFBQcBAQQmMCQw
IgYIKwYBBQUHMAKGFmh0dHA6Ly9lNy5pLmxlbmNyLm9yZy8wJwYDVR0RBCAwHoIL
d3N0a2V5cy50b3CCD3d3dy53c3RrZXlzLnRvcDATBgNVHSAEDDAKMAgGBmeBDAEC
ATAtBgNVHR8EJjAkMCKgIKAehhxodHRwOi8vZTcuYy5sZW5jci5vcmcvNjEuY3Js
MIIBAwYKKwYBBAHWeQIEAgSB9ASB8QDvAHUAlpdkv1VYl633Q4doNwhCd+nwOtX2
pPM2bkakPw/KqcYAAAGdBTo6vAAABAMARjBEAiBPmlA/U/CZOVdw/3rJN3hH9+jA
TBihCfnrSMdNC1xWQAIgNE1FOpS2PURTh8jP6Tu8jytR1x9X2g986d4reUyMqEwA
dgDRbqmlaAd+ZjWgPzel3bwDpTxBEhTUiBj16TGzI8uVBAAAAZ0FOjtiAAAEAwBH
MEUCIQCFS+VZqF0mkieuw5YkmxJcC7pq5Gr6KxDs3pq44hfbfAIgFkQYYNoTOLBJ
Cbrzz4sVB40E06n+rfKFZ/k5fCz/FS4wCgYIKoZIzj0EAwMDaQAwZgIxAL5J/AeW
g+PSdeF3Ndfp5TTl1lzFcAxFMgm68jlk4eAC+I4u9ZYyhKxpeNIonG6utgIxAPCF
LEvxoUCvlUIbmFV6xk+MQn6/FKuaYyRMBHObM5hsSZI7DkH44RRM2/9DIWX6bw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
+VUwFj9tmWxyR/M=
-----END CERTIFICATE-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgorFGbpc7J0PQoiQ3
1TLMzFZr5j6udFmO+ubn0sd0sfOhRANCAASvJAEPgDYZbHlQuMIxXOrdla00+z6m
fswl3EwOujDyJQZfDOIafH/DEGltyVlf9ikw0Qjc/RvPcRhj8AAWpL3c
-----END PRIVATE KEY-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQghsi25k5YNZWoobY+
5Em3YEW2JC0GBqGee2Z+DAX15QWhRANCAAQIuwOL1ldC3mFluNxMolg9j+Qh0MAy
AKqeu3i1XvwCcZ/7EiiVgD3qw9z5FENBageClPd777AfGo0ORPnAFp6B
-----END PRIVATE KEY-----

View File

@ -0,0 +1,14 @@
This directory contains your keys and certificates.
`[cert name]/privkey.pem` : the private key for your certificate.
`[cert name]/fullchain.pem`: the certificate file used in most server software.
`[cert name]/chain.pem` : used for OCSP stapling in Nginx >=1.3.7.
`[cert name]/cert.pem` : will break many server configurations, and should not be used
without reading further documentation (see link below).
WARNING: DO NOT MOVE OR RENAME THESE FILES!
Certbot expects these files to remain in this location in order
to function properly!
We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

View File

@ -0,0 +1,14 @@
This directory contains your keys and certificates.
`privkey.pem` : the private key for your certificate.
`fullchain.pem`: the certificate file used in most server software.
`chain.pem` : used for OCSP stapling in Nginx >=1.3.7.
`cert.pem` : will break many server configurations, and should not be used
without reading further documentation (see link below).
WARNING: DO NOT MOVE OR RENAME THESE FILES!
Certbot expects these files to remain in this location in order
to function properly!
We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

View File

@ -0,0 +1 @@
../../archive/wstkeys.top/cert2.pem

View File

@ -0,0 +1 @@
../../archive/wstkeys.top/chain2.pem

View File

@ -0,0 +1 @@
../../archive/wstkeys.top/fullchain2.pem

View File

@ -0,0 +1 @@
../../archive/wstkeys.top/privkey2.pem

View File

@ -0,0 +1,17 @@
version = 5.4.0
archive_dir = /etc/letsencrypt/archive/wstkeys.top
cert = /etc/letsencrypt/live/wstkeys.top/cert.pem
privkey = /etc/letsencrypt/live/wstkeys.top/privkey.pem
chain = /etc/letsencrypt/live/wstkeys.top/chain.pem
fullchain = /etc/letsencrypt/live/wstkeys.top/fullchain.pem
[renewalparams]
account = 826d0805fbbb9268ecf8b23b8c211217
authenticator = webroot
webroot_path = /var/www/certbot,
server = https://acme-v02.api.letsencrypt.org/directory
key_type = ecdsa
[[webroot_map]]
wstkeys.top = /var/www/certbot
www.wstkeys.top = /var/www/certbot
[acme_renewal_info]
ari_retry_after = 2026-03-19T14:46:28

16
nginx/conf.d/default.conf Normal file
View File

@ -0,0 +1,16 @@
server {
listen 80;
server_name wstkeys.top www.wstkeys.top;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
proxy_pass http://host.docker.internal:5205;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

58
services/orders_rokky.py Normal file
View File

@ -0,0 +1,58 @@
import sqlite3
from API.rok import get_order_content
import requests
# from send_mai import send_html_flow
conn = sqlite3.connect("./files/rokky.db")
cursor = conn.cursor()
def rok_orders():
conn = sqlite3.connect("./files/rokky.db")
cursor = conn.cursor()
cursor.execute("""
SELECT * FROM orders
WHERE key IS NULL OR key = ''
""")
rows = cursor.fetchall()
for row in rows:
order_id = row[12] # ✅ id (а не 12!)
id_i = row[1]
print(f"Обработка заказа {order_id}")
try:
# пример:
new_key = get_order_content(int(order_id))
cursor.execute("""
UPDATE orders
SET key = ?
WHERE id = ?
""", (new_key, order_id))
url = "https://wstkeys.top/newOrder"
# url = "http://0.0.0.0:5205/newOrder"
payload = {"orderId": int(order_id), "partnerSchemaId": 209}
headers = {
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
except Exception as a:
print(a)
print(response.status_code)
print(response.text)
conn.commit()
conn.close()

View File

@ -1,17 +1,43 @@
import datetime
from API.rok import download_products, download_prices
from API.rokky import decrypt_and_unpack, add_product, update_prices
from services.orders_rokky import rok_orders
def run_task():
print("REDs start download_prices:!", datetime.datetime.now())
download_prices()
decrypt_and_unpack("prices")
print("START update_prices")
update_prices()
print("REDs download_prices:", datetime.datetime.now())
print("END update_prices", datetime.datetime.now())
print("REDs download_prices:!", datetime.datetime.now())
def run_task1():
print("START download_products")
download_products()
print("START decrypt_and_unpack")
decrypt_and_unpack("products")
print("START add_product")
add_product()
print("END-s add_product!!!")
print("REDs download__product:", datetime.datetime.now())
def run_task2():
try:
print("START run_task2")
rok_orders()
print("END run_task2", datetime.datetime.now())
except Exception as e:
print("ERROR run_task2:", e)
def run_task3():
try:
print("START run_task3")
update_prices()
print("END run_task3", datetime.datetime.now())
except Exception as e:
print("ERROR run_task3:", e)

View File

@ -1,25 +1,4 @@
import sqlite3
from datetime import datetime
conn = sqlite3.connect("./files/rokky.db")
cursor = conn.cursor()
import requests
sku = '5388258'
cursor.execute("""
SELECT *
FROM orders
WHERE orders_rokky = ?
""", (sku,))
rows = cursor.fetchall()
for row in rows:
print(row[3])
s = row[8]
s = s.replace(" ", "+", 1) # только первое вхождение после времени
dt = datetime.fromisoformat(s)
result = dt.strftime("%Y-%m-%d %H:%M:%S")
print(result)
conn.close()
ip = requests.get("https://api.ipify.org").text
print(ip)

View File

@ -1,14 +1,24 @@
from apscheduler.schedulers.background import BackgroundScheduler
from services.red import run_task
import datetime
import time
from services.red import run_task, run_task1, run_task2,run_task3
def start_scheduler():
scheduler = BackgroundScheduler()
# каждые 10 секунд
scheduler.add_job(run_task, 'interval', minutes=10)
# Раз в сутки (24 часа)
scheduler.add_job(run_task, 'interval', days=1)
scheduler.start()
scheduler.add_job(run_task2, 'interval', minutes=1, next_run_time=datetime.datetime.now())
scheduler.add_job(run_task, 'interval', minutes=5)
scheduler.add_job(run_task1, 'interval', days=1, next_run_time=datetime.datetime.now())
# scheduler.add_job(
# run_task3,
# 'interval',
# minutes=2,
# next_run_time=datetime.datetime.now() # 🔥 сразу запуск
# )
scheduler.start()

8
start.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/bash
set -e
# Поднимаем WireGuard (игнорируем ошибки resolvconf)
wg-quick up ./wireguard/wg_confs/wg0.conf || true
# Запускаем приложение
uv run main.py

View File

@ -1,20 +1,18 @@
<!DOCTYPE html>
<html>
<body style="font-family: Arial, sans-serif; background:#080808; padding:20px; color:#fff;">
<body style="font-family: Arial, sans-serif; background:#0f0f0f; padding:20px; color:#fff;">
<table width="600" align="center" style="background:#000000; padding:20px; border:1px solid #00cfff;">
<table width="600" align="center" style="background:#111; padding:20px; border:1px solid #00cfff;">
<tr>
<td align="center">
<!-- LOGO -->
<div style="text-align:center; margin-bottom:10px;">
<img src="https://wstkeys.top/images/10.png" alt="logo"
style="max-width:400px; height:auto;">
style="max-width:200px; height:auto;">
</div>
<!--<h1 style="color:#00cfff; margin-bottom:5px;">{{company_name}}</h1>-->
<p style="margin:0; color:#ffffff; font-size:16px; font-weight:bold;">
Спасибо за покупку в WST Keys (West Store Trusted Keys)
</p>
<p style="margin:0; color:#aaa; font-size:16px;">Спасибо за покупку в WST Keys (West Store Trusted Keys)</p>
<hr style="border:1px solid #00cfff; margin:20px 0;">

6
wg/coredns/Corefile Normal file
View File

@ -0,0 +1,6 @@
. {
loop
errors
health
forward . /etc/resolv.conf
}

11
wg/templates/peer.conf Normal file
View File

@ -0,0 +1,11 @@
[Interface]
Address = ${CLIENT_IP}
PrivateKey = $(cat /config/${PEER_ID}/privatekey-${PEER_ID})
ListenPort = 51820
DNS = ${PEERDNS}
[Peer]
PublicKey = $(cat /config/server/publickey-server)
PresharedKey = $(cat /config/${PEER_ID}/presharedkey-${PEER_ID})
Endpoint = ${SERVERURL}:${SERVERPORT}
AllowedIPs = ${ALLOWEDIPS}

6
wg/templates/server.conf Normal file
View File

@ -0,0 +1,6 @@
[Interface]
Address = ${INTERFACE}.1
ListenPort = 51820
PrivateKey = $(cat /config/server/privatekey-server)
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth+ -j MASQUERADE

View File

@ -0,0 +1,6 @@
. {
loop
errors
health
forward . /etc/resolv.conf
}

View File

@ -0,0 +1,11 @@
[Interface]
Address = ${CLIENT_IP}
PrivateKey = $(cat /config/${PEER_ID}/privatekey-${PEER_ID})
ListenPort = 51820
DNS = ${PEERDNS}
[Peer]
PublicKey = $(cat /config/server/publickey-server)
PresharedKey = $(cat /config/${PEER_ID}/presharedkey-${PEER_ID})
Endpoint = ${SERVERURL}:${SERVERPORT}
AllowedIPs = ${ALLOWEDIPS}

View File

@ -0,0 +1,6 @@
[Interface]
Address = ${INTERFACE}.1
ListenPort = 51820
PrivateKey = $(cat /config/server/privatekey-server)
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth+ -j MASQUERADE

View File

@ -13,4 +13,3 @@ PublicKey = bcJDrYlhWls25zz9+bJcWiONw8Qfx1tai504+vKLcgQ=
PresharedKey = 40DSkC0TTySjBFyUj19++ngCdYxAHZaLnsrz8Ck9R2Q=
Endpoint = 85.208.110.167:50395
AllowedIPs = 0.0.0.0/0,::/0