From 990d6e9a38991cb4267875148d1448932c376827 Mon Sep 17 00:00:00 2001 From: Alex55 Date: Sun, 5 Apr 2026 10:59:24 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- API/__pycache__/rok.cpython-313.pyc | Bin 5351 -> 6330 bytes API/__pycache__/rokky.cpython-313.pyc | Bin 6618 -> 6595 bytes API/rok.py | 41 +++++- API/rokky.py | 2 +- Dockerfile | 46 ++++--- app/__pycache__/__init__.cpython-313.pyc | Bin 450 -> 433 bytes app/__pycache__/routes.cpython-313.pyc | Bin 6208 -> 6866 bytes app/routes.py | 51 +++++--- docker-compose.yml | 11 +- models/orders.py | 18 ++- .../meta.json | 1 + .../private_key.json | 1 + .../regr.json | 1 + .../conf/archive/wstkeys.top/cert1.pem | 21 ++++ .../conf/archive/wstkeys.top/cert2.pem | 21 ++++ .../conf/archive/wstkeys.top/chain1.pem | 26 ++++ .../conf/archive/wstkeys.top/chain2.pem | 26 ++++ .../conf/archive/wstkeys.top/fullchain1.pem | 47 +++++++ .../conf/archive/wstkeys.top/fullchain2.pem | 47 +++++++ .../conf/archive/wstkeys.top/privkey1.pem | 5 + .../conf/archive/wstkeys.top/privkey2.pem | 5 + nginx/certbot/conf/live/README | 14 +++ nginx/certbot/conf/live/wstkeys.top/README | 14 +++ nginx/certbot/conf/live/wstkeys.top/cert.pem | 1 + nginx/certbot/conf/live/wstkeys.top/chain.pem | 1 + .../conf/live/wstkeys.top/fullchain.pem | 1 + .../certbot/conf/live/wstkeys.top/privkey.pem | 1 + nginx/certbot/conf/renewal/wstkeys.top.conf | 17 +++ nginx/conf.d/default.conf | 16 +++ services/__pycache__/__init__.cpython-313.pyc | Bin 139 -> 122 bytes services/__pycache__/red.cpython-313.pyc | Bin 1032 -> 1015 bytes services/__pycache__/tim.cpython-313.pyc | Bin 636 -> 619 bytes services/gg.py | 119 ++++++++++++++++-- services/mailer.py | 2 +- services/send_mai.py | 79 +++++++----- services/test.py | 4 + start.sh | 8 ++ wg/coredns/Corefile | 6 + wg/templates/peer.conf | 11 ++ wg/templates/server.conf | 6 + wireguard/coredns/Corefile | 6 + wireguard/templates/peer.conf | 11 ++ wireguard/templates/server.conf | 6 + wireguard/{ => wg_confs}/wg0.conf | 0 44 files changed, 607 insertions(+), 86 deletions(-) create mode 100644 nginx/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/826d0805fbbb9268ecf8b23b8c211217/meta.json create mode 100644 nginx/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/826d0805fbbb9268ecf8b23b8c211217/private_key.json create mode 100644 nginx/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/826d0805fbbb9268ecf8b23b8c211217/regr.json create mode 100644 nginx/certbot/conf/archive/wstkeys.top/cert1.pem create mode 100644 nginx/certbot/conf/archive/wstkeys.top/cert2.pem create mode 100644 nginx/certbot/conf/archive/wstkeys.top/chain1.pem create mode 100644 nginx/certbot/conf/archive/wstkeys.top/chain2.pem create mode 100644 nginx/certbot/conf/archive/wstkeys.top/fullchain1.pem create mode 100644 nginx/certbot/conf/archive/wstkeys.top/fullchain2.pem create mode 100644 nginx/certbot/conf/archive/wstkeys.top/privkey1.pem create mode 100644 nginx/certbot/conf/archive/wstkeys.top/privkey2.pem create mode 100644 nginx/certbot/conf/live/README create mode 100644 nginx/certbot/conf/live/wstkeys.top/README create mode 120000 nginx/certbot/conf/live/wstkeys.top/cert.pem create mode 120000 nginx/certbot/conf/live/wstkeys.top/chain.pem create mode 120000 nginx/certbot/conf/live/wstkeys.top/fullchain.pem create mode 120000 nginx/certbot/conf/live/wstkeys.top/privkey.pem create mode 100644 nginx/certbot/conf/renewal/wstkeys.top.conf create mode 100644 nginx/conf.d/default.conf create mode 100644 services/test.py create mode 100755 start.sh create mode 100644 wg/coredns/Corefile create mode 100644 wg/templates/peer.conf create mode 100644 wg/templates/server.conf create mode 100644 wireguard/coredns/Corefile create mode 100644 wireguard/templates/peer.conf create mode 100644 wireguard/templates/server.conf rename wireguard/{ => wg_confs}/wg0.conf (100%) diff --git a/API/__pycache__/rok.cpython-313.pyc b/API/__pycache__/rok.cpython-313.pyc index e4d55f830b90bae06005e5f1fe2381f7d0364622..735ec71cb721d8cbc243138a7e17e24eb2bbad13 100644 GIT binary patch delta 2821 zcmZ`*Z)jWB6~FiWe@{1@-aO`E!n(&nF&>E$Ka&Uc+@o{OJ@?=F{qFrL^T+3mC*iP0;Ip28SUr|pF?zT(UD=n_O=5DV1SU-Ld2QwU z1EMs|<&Bje4>T22ut(=NL`-pl1~#Vt-xz5tMl)qoIY?Q^RGB`lOsmtHshOdyz`~}! zlQ3i27$Os!gRqDhH^V#0HM);QO#|F9GXk>9jDn1VGlov^b;19{6)ux-(=^%j?`U>( zraEgoqpW`Y`mJo`vO7Vqg+xfpBowmyJNiuw*W;O^6Xr@+Y)?UHRu^m*MziE8uTGk| zqLn|*Vs23wx)4FL%yvM-(jYt)dlVh$;_>rrmig0>=SsI`>!k`yK!_uQNCzM5#y;8= zyHTvOip?CB0mHESSK%t{eejC-8T~;F3~U(1Zj2S`b9T)W-)7Z@?aAeOtzp+1Y!A3T z3jKf0x9>uU-HJR|=z zpd81znrQL`-0V%;7-tHmnB{6xA=I*3q?O5(3U~tkXVERIoaINU#hD89lT)OyRm}Nl zD>`WLfXEQJbkUMb)zl6PHN{f$UGB$Pyf^g1M}(AqN=PBu>SXG^_Zw|6(zb=cw!;P6 zNZV#uvO&hU)`ZgAb3`D%2jbIGih$aO`!J|(8zgF}ot+_S0HStE>8%bgYL;fku*hqn zc310}BU+*MJS-tUh^vctUHZc~H^BufgS>ox7>97rc8PQkYPB@ELIz2pzqNRol%RIf zWPnWlXokGR50DuO{`TJPZAG@*{Jyr{(jX7iVoh&P+l*Vf`<5Ob(I@p8+RB|tOfdmE zF`NP0g+fJ<0`WCd8J*PE;0(S^%OzTIY^Up3kKN70T5w)R=dQo;yx8?q;sXX}pb_80?vn7!a0H3plW0I;vIW37xn$1psA0Q;Ja34QkSDDxD5 zON!NsM{Nf|w0+k$=|L|uyVS4)5@Hu1$b_HsE4Ty}$=^d=%SV59bhYom=b`N4vCvvL zwp>^$yz}Pbare#GkiHQmJ$>(wxi{DPce!5~X*%R8kzdc~iRCj(XWlt`kFLcN_rJGt zg+#hn!@|7`4bKZ}e`z6_K7xOehMZj5}gBb6H_pNvmt;m^Zi zEq9QAcz{EFl%jr+M|~`Hd=LL=EOI=}f0`DL?{N=BKPvV?mWbcy%|)gaTkMD5C)^ zM?q^{S)Dk~(BP(w`GKzm*V>7OeZyhT!8#VEwgCHVoFm4s+qX9H+YC-1z;!V6Q_#=o z>{ZCiUPIv{X$#HII(Bvv<4&PC4I-nl^QeCp#Zx%M>vx#p4dL;yR*#nb6*zb%!L(4a zZg()=otXyXZ{X+r3B)4#vJ+{Kw*l?-_*wec{Y89Nb6p~0=vh5tnG$%NrLKP3Jf zg7=7W&Nj)O!7bJ8i{D>HjNaV3>+-?4(x!RriT>dt< ZD7cpsEPjX@8w)f_`=0FWrwKpx{{S*uGeiIY delta 2118 zcmZuyT}&KR6ux)QhsVu{;=``e;XuCK{Co6BBqa_Qi8%SlBk+WY0bOou51R-0z-y z`^X=;liRemVDbb|u*?ZL*b~zMd(mU=aTB=w?D5;1LEY`K-L#p=zP>S;w+2 zG@&2nUP+VL#=jqyNVEQ4oT5E%ZOycAc^2UHT8|0n+|lRz~v z&%2IYnl5`~Ncz7^z4^}kIcLGjzdpZYPCk4u4dDaRHl49Bpma|p3D%(zC+I*Cm=sZRF(i?Hn#XVi2O+r1oxU@oNG+-CS#AYq8?L2tS+wjxy##Zf73dYm#;SR+4^68w93VGZBj7Wx zj5DqhEs>daF4BBV*FYD}_zNytL!lWcX84l*1?R^?p{#XnK5Hh|R!Pv^8HuTE#MOEm+7*uS%s2Aw;9vQ-X>JDS& zcNm*YRZSvBzW%*#q0!GME#0%+l>{vSZT=UDXK}ZvCj5UBpZkrep5+vD5kSNb z@B&aii5-^f`;@A6wkWs0c8tf6J@-xV*n0By1^RTnwJ1EQ1v4ucz83BEHiNgU3jO%#T@=FKiA0w_M@|-h!8LaUVHD_`^)!? z_J20xtf75_@kHbObi>~=&JQ-R5oPknhcMBd;h|BTeKXiTa*W+=>OlSOvDm00uWKnkvx0P%{gl$WY%4`Y=(L2b7S($80`kh%ikdJ&Oh1LE6i0f$ ztnXtvbNs52kGf$VwQ7s2;UnhB;VXkvkO>_}qBeNKvld)9j5wSmA0seA^V!nebWM?n zCeT39GA0jrB@A(i>svIbHqGt6j3ka4Z2_G=!k_D*xX%1n&O~{8Yi7~W*-F@DA2F{|5zQXlUAVoRTZlX-=wLQT5~i$u0o;x*Vqf delta 102 zcmX?Xe9M^kGcPX}0}vdM*pnHxk#{qTn38@*er~FMQch{AetCXTwtjkIZff!7qb$6F zY@A7n#i;?CuZUVPvfpAYD9TJuoh&Tw!dN&tLOhg3`m%uP=8fW+j6lA$q%332WJ}2| E0I;PXi2wiq diff --git a/API/rok.py b/API/rok.py index 45049a4..d06e945 100644 --- a/API/rok.py +++ b/API/rok.py @@ -1,8 +1,10 @@ from dotenv import load_dotenv import os load_dotenv() - +import sqlite3 import requests + +conn = sqlite3.connect("./files/rokky.db") partner = os.getenv('partner') user_name = os.getenv('userName') password = os.getenv('password') @@ -78,8 +80,10 @@ def download_prices(): print("Каталог цен скачан.") -def create_order(sku, quantity, unit_price, partner_order_id): +def create_order(sku, unit_price, partner_order_id): # try: + conn = sqlite3.connect("./files/rokky.db") + cursor = conn.cursor() url = f"{BASE_URL}/orders" headers = { @@ -91,7 +95,7 @@ def create_order(sku, quantity, unit_price, partner_order_id): "items": [ { "sku": int(sku), - "quantity": int(quantity), + "quantity": 1, "unitPrice": float(unit_price) } ], @@ -117,7 +121,18 @@ def create_order(sku, quantity, unit_price, partner_order_id): response.raise_for_status() # Всё равно выбрасываем исключение - return response.json() + r = response.json() + order_id = r["orderId"] + print(partner_order_id) + print(order_id) + cursor.execute(""" + UPDATE orders + SET orders_rokky = ? + WHERE id_i = ? + """, (order_id, partner_order_id)) + + conn.commit() + conn.close() except requests.exceptions.RequestException as e: print(f"🌐 Сетевая ошибка: {e}") @@ -146,6 +161,9 @@ def get_orders(page=1, page_size=25): def get_order_content(order_id): + conn = sqlite3.connect("./files/rokky.db") + + cursor = conn.cursor() url = f"{BASE_URL}/orders/{order_id}/content" headers = { @@ -156,20 +174,31 @@ def get_order_content(order_id): response = requests.get(url, headers=headers) response.raise_for_status() data = response.json() + con = data['orderContentItems'] for c in con: content = c['content'] + + cursor.execute(""" + UPDATE orders + SET key = ? + WHERE orders_rokky = ? + """, (content, order_id)) + + conn.commit() + conn.close() + return content -# content = get_order_content(5379499) +# content = get_order_content(5390872) # print(content) # orders = get_orders() # print(orders) -# order = create_order(22774, 1, 21.3, "my-test-order-12w3") +# order = create_order(2197, 0.13, "sss22289522") # print(order) diff --git a/API/rokky.py b/API/rokky.py index 596eb4c..5a5d7c7 100644 --- a/API/rokky.py +++ b/API/rokky.py @@ -173,7 +173,7 @@ def update_prices(): data = [] for item in prices: sku = item["sku"] - price = item.get("basePrice") + price = item.get("price") price_gg = item.get("baseSuggestedRetailPrice") price_sales =item.get("discountPercentage") is_sale = item.get("isSale") diff --git a/Dockerfile b/Dockerfile index c9fc558..ebb159c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,29 +1,41 @@ -FROM python:3.12-slim-bookworm +FROM python:3.12-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 wireguard iproute2 iputils-ping curl +# ✅ Устанавливаем все зависимости включая openresolv +RUN apt-get update && apt-get install -y --no-install-recommends \ + apt-transport-https \ + gnupg \ + lsb-release \ + curl \ + ca-certificates \ + wireguard \ + nano \ + iptables \ + iproute2 \ + openresolv \ + && rm -rf /var/lib/apt/lists/* -# Download the latest installer +# Устанавливаем UV 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 +# Копируем проект +COPY . /app + +# Копируем start.sh +COPY start.sh /app/start.sh + +# ✅ Исправляем права на конфиг WireGuard (должно быть 600) +RUN chmod 600 /app/wireguard/wg_confs/wg0.conf + +# Устанавливаем зависимости Python RUN uv sync --frozen -# Expose port 8000 +# Порт Flask EXPOSE 5205 - -# Presuming there is a `my_app` command provided by the project uvicorn main:app --reload -CMD ["bash", "-c", "wg-quick up /app/wireguard/wg0.conf && uv run main.py"] \ No newline at end of file +# Запуск +CMD ["/app/start.sh"] diff --git a/app/__pycache__/__init__.cpython-313.pyc b/app/__pycache__/__init__.cpython-313.pyc index a14e576f215ce20a919c5208f87d4fcd942cfbf3..434a7d8ff0dcd902659eceeff31f3b8445b25e6e 100644 GIT binary patch delta 30 kcmX@aypfsvGcPX}0}v>$*}ajQosm^UKe3=-vIgTU0Cvv@$p8QV delta 47 zcmdnUe2AI*GcPX}0}woUzj-4!JENGYenx(7s(w;VX{vsCeo?l5dSY&B@nmtvSpZuZ B4?_R| diff --git a/app/__pycache__/routes.cpython-313.pyc b/app/__pycache__/routes.cpython-313.pyc index 7933f18f211dc585b749b8649c146bc38aaef1e3..c0f3714a06cd09f03acd72ca11a1cd814134513b 100644 GIT binary patch delta 3151 zcmZ`*ZEzFE8QwdcK2KjK$sag?SKto>iVgS!OmH127?528mQ@@K)o7%%QLs+#o>Ypb zjbzf6kY>hCj?8GLnF-A=GWlbmG;UgGXIhy2Y3E$KGt6PqOzUa>Is?-m?VrB8vV@bu zj_%RB@7M0WxBJ}wVdr1F+>c!@2ZGjg@?Ltt_l~=sd;Oi(J|*HH4veBGDh!AbCvh^_ zJm8ABiJQrm0Z+tByb*~=tZyCgMf}9iWPTt(0%y1_C~7-X)5X*D2$9;Toz$H%5A7`X z*Q0ig3)DW}6n?g8sB3+WvV7(RZ8Nu_cjI#+UV28v#;Bt@$IWMIhx)V+xsVw%N#_EQ zF0LFDbvK~Oh$KkO|DP=CiF%__J0JD+@KOId|1B)tPQK=dx1D3wnswH#&&gIBt$5e1 z^KN3f-sVGGv-WGgufQA5B#{$2Ii4jcnHbWzoGXj*WLC+^N-o41E>%`i@tiy%kCQ|O z6jth`p3jGPL!{y)$)@tjoZ(r^m6267F)k;-)y-nh7#m>(b(Nz#DhWnD zj+wgXn}Jpt7uMHW)*wVr&Q7jkiAtS(6AGfyEfu>JC3YjEcq?O^d>ZK*4OP5i-b#jb zx!j$+$~OX;Dc%F#rnUbuZVdIB8qpXR@*O91LusnDwP4tic|v3*dC?G3aHRTS`#WVt z%@aAEP?PC&{tmdVesJ|SSpTK|dwp(UTA$Z%=y$RHi9Uxxb65X#;SKl)#QIHqDmsh@ z;7H(Yr(`vUqq!`R@i57&IXT4)A&281GqP%Pz3P?m@X~+ zT)zqOZIGrHX0Sew!TN^&E2_cpcNf%`z~QF;Tm80v2U8IgclF=VXnlU+GI&ly>iMbL z+8t}~yXjOs9masEFqYv&PlT03MvhN{E)&K$k;&$jTo|uW2ncJ131eEAFb3|3lkEBP z7sGgxq?2;FqY1XH-Z1X_+D~h-wQ{xEaobDS3FRa7i$g>J!>WFNBAt^v3@ePI$jO{` z-PTngR7WTXS*2UI8-KGAMnx9JSG&l!!Dll(>W|^m0EFen#Um@OfEKqm z7o5JCeOLC)jxCCtiiaME()u3QB3B}_7Z#n3#lsI={+ZKPPM2(pu3)kMfv09>>dI7U z`=Y10c=YRWD{kM+Yj3?)s=Y2RxI2qSmIZ0HbxCMg6_9_(MEm~PLrcPzl}%08T84jd zc0p(;9(!UzW*>7~mNu4#7o{!Jkz)U{=$q+#tFNRzvA68=mzuBp=1zSk=&z=9m;A(P zvX67C4rF)Dh*!k7T_Bq6mm|}WpA4=D($#S3;#_Xgw|`0K)p{LuoTSAZ-7o)X!?wd+ z=w6qjf0yZAUu%EZbiaiI`F_|8IAw2F9QKr)OUKm$$HU+mi6YiXdJdyfiqwuXL_-T9-f- zS{7=qCQIA2%#zTwEcj;kE(sf-*dUKKE%~{?tqPP3P&g$rErWw1YpW` z{O~E*?fWnppt?Z{tO6ntsQeuYwC?0Mg;yxhvXB!L=pw#Zk0H>N7cQ->+yn!VQ=rah z_q~6C$-O6?=Arzn{(7!ovj@fs+h`u@K~4jNoaM2%Qw1B0O<))80-Gb!LxCPW(g|SL z#^hY`Tvn0E9;)jC2$`RzBL}FKom3OaUSRhHc2djl#XU)U><$ypPg05^XTkla@78>7 z3D86>+DZ*Bu(8{rZ&(kUIMxOP#>j@fe8WOj!$(*l438?49{{hZZEP2)jI|80svRF^ z6hkjf!OtiaSPj4?) zuv-+NYbdYNwm$>QoRGgoGN7ZkQ?(ax)dc70OLTA%9ejxF50U#J62C+pj}U%@w*DP; zK0@JtBKKDoWRqrVOZA$q?o~1P*o1g#mFKviHc_{y<3(-<)%33NAg!i2#9J;mOgFqa haINK9eX&93wtvOfbK9xUj#VnHc5DBwJ0Q@>{ST&W0hIs% delta 2207 zcmZ8iT~HHO6yDur^Rt^D@*jdB8-C?Cil8GPipr0GXjxMk$utwm0ue~)-9(gWYjirJ zw6&mjrp;4_r&b@@&a^)8Xh)stlY`=eO>L*0u`iuIz`#S_+H*H7X3Vf>&pqcm=ia^N zJBR0O5BFKN%w~>)Uq|4l#6Q+M7BBtzo!Xl|gqHoD*!IUm)w6NY@MAAdu;*)nzIH;We08e+tf!;EMv!tdEd*ozR3 zB7|Q>lsQF9h*mPViu~ofe)q25Q{)e*e!RrEX#s!D9BrZVrg0?2(o!^q;u5N(^JZB} z#-nLzMw&#iSup4)rF2xD&g8YTu|#qKM>JinCH>OOOiGxS)6>#bIT#Gyr;r7{e2aX2 zzA`kGnw3HqXEIV~K82=3ld)Mz#t$`arw#lLcw`ntmimMDBP;$}^O38B1RBX!iP_ks zgj}%p;19K4+KRu>c5((-Yv9>h#U0K=_?XK`Q#i;5^>moBPzM z_!4UZ9MPVdIgMt=`W?&TfG%hR=7{>kOp?Vhi?byI6q=hHBga#Iqw%m_G=v$FzD--O z3DlT#$4!m6@tn=+9rLP&-Q5jg!$=waQ}5FyjpbC>h&OdkuV@^#kG6){R#xSZKmjfQ zxIJ1>DnaqLRjbKFlW5*Yt0_fGD^o=UsWCzI>#0}^MI|{ka_CJYH&&~n!kn6+C>P(# z$V>oQE6H_pRXgtqdV)Hl2~ZPsopl(WG1OM}Lh(&fQqCYL8k5Hpi3Q8-)uyy0r<)YA zG%cj@m@!xb+-MZ$P%54ohw8-}1qp~ULrjTrsZkhDCDT$ejh`DUv5u>uow$kX25E$m;==l*ZF}{mJ9ev)$+V@hz_HS{xURNXDfr`%x!2%ixilp`EkTwoXG?Tp01y zQ@m}dezAV}-F0qH_QXq@=S$xmU#@rER+$}mX|gX3EDkKsubTqd9(8qP-6Ujtwsn-% zv2^K^OF8#F>6xW9+xN;-o|Ewh&$P~L?<;M|vU|mFZ+NwRwQ;S!?}fG>KlAwTu*unB z&t>kNUo*FD>ovwh8ysacFY$}~XJ$}Y0r&H((03b>am~eDb+l#t?hAYo>*wmpEy~N3%ZaTn}LSBqNy0M7dpAG=Nxo# zLqjkq%StB~gca_i_?B8w7g&yyTT&Z1fCy;87)na>XUGis!L~}nbm6R1Fnr+Nb#gkE z&d7NtHH|93aG%GE)@r&Ie{Xg1q^%KQE~>%5SpB}j7=ToTd4%2pS06m`BYfKNmE*OR zzd3YcXt_N%mAkNJ+xtRWch~8rtv_y*{7gp#lIIu^-9(UMq7y`%B%%kzf?>GlJW#1! zK)u99QY(i-{X`oEA;S~^k|bf}#Oh0q$5npeu8FuG7C%N(*78Zk2$hp~=E0e%_Z@cgbLWvUC}39oQg*?cdo z^ZM?yrV_q5IN>?eQQA%0(4sxcq`DN&wg>%nHU1$Ql(1Da3!M962++URN8~LmJ z6+bAA^W|F_im`1lG+mA>eTPOX=mugrvcZ71F+@|0?xyd$?^b{A@=7L`%KFym=1o8g m1QjB2!iGTw4X)IzcnPF_lX1}X1k$iUw2el5+t;lnSN1<2lKpA` diff --git a/app/routes.py b/app/routes.py index f0651e9..904bc78 100644 --- a/app/routes.py +++ b/app/routes.py @@ -4,9 +4,12 @@ import os import sqlite3 import json # from services.rokky import ones -from API.rok import create_order +from API.rok import create_order, get_order_content 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 + import logging @@ -18,7 +21,7 @@ IMAGE_FOLDER = os.path.join(BASE_DIR, 'images') @main.route("/") def index(): - return "Hello wstkeys!!!" + return "Hello wstkeys!!123!" @main.route("/images/") def get_image(filename): @@ -26,21 +29,30 @@ def get_image(filename): @main.route("/orders/api_payments", methods=["POST", "GET"]) def index1(): + DB_PATH = "./files/rokky.db" # Получаем все GET-параметры params = request.args.to_dict() logging.warn(f"newOrder: {params}") # Просто выводим на экран (в ответ клиенту) # парсим данные - sku = params.get("id_d") - product_id = params.get("id_i") + id_d = params.get("id_d") + id_i = params.get("id_i") email = params.get("email") - price = params.get("amount") - + amount = params.get("amount") + currency = params.get("currency") + date = params.get("date") # всё остальное сохраняем как JSON content = json.dumps(params, ensure_ascii=False) - db_sku, db_price = get_sku(sku) - create_order(db_sku, price, db_price, f"my-test-order-{product_id}") - # send_telegram(content) + send_telegram(content) + + message = f"🔹 Спасибо за покупку в WST Keys (West Store Trusted Keys)\n\n⏳ Ваш заказ обрабатывается и будет доставлен автоматически" + create_messagea(id_i, message) + # + sku_rokky, price_rokky = get_sku(id_d) + + + send_telegram(content) + name_p, im = get_product(id_d) conn = sqlite3.connect(DB_PATH) cursor = conn.cursor() @@ -48,9 +60,9 @@ def index1(): try: cursor.execute(""" - INSERT INTO orders (sku, product_id, email, price, content) - VALUES (?, ?, ?, ?, ?) - """, (sku, product_id, email, price, content)) + INSERT INTO orders (id_i, id_d, email,name_p, im, amount, content, currency, date, sku_rokky, price_rokky) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?) + """, (id_i, id_d, email, name_p, im, amount, content, currency, date, sku_rokky, price_rokky)) conn.commit() except Exception as e: @@ -58,18 +70,17 @@ 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 # return "Hello GET" -@main.route("/sales", methods=["POST", "GET"]) -def index2(): - return "Hello GET!!!++!!ss" - @main.route("/newOrder", methods=["POST"]) def new_order(): + if not request.is_json: return jsonify({"error": "Invalid content type"}), 400 @@ -84,9 +95,13 @@ def new_order(): # TODO: обработка заказа print(f"New order received: {order_id}") - send_telegram(data) - # logging.warn(get_order_content(order_id)) + send_telegram(order_id) + logging.warn(f"newOrder: {order_id}") + get_order_content(int(order_id)) + send_html_flow(order_id) + + return jsonify({"status": "ok"}), 200 diff --git a/docker-compose.yml b/docker-compose.yml index 843aa33..82f1fa9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,6 +17,7 @@ services: web: build: . container_name: flask-dev + privileged: true # ✅ Даёт все права ports: - "5205:5205" # Пробрасываем порт наружу volumes: @@ -26,5 +27,11 @@ services: environment: - FLASK_DEBUG=1 # Дополнительная страховка для включения дебага - PYTHONUNBUFFERED=1 # Чтобы логи выводились сразу, а не кэшировались - - \ No newline at end of file + - eKCPpyzkcCTS=${eKCPpyzkcCTS:-} + restart: always + cap_add: + - NET_ADMIN + - SYS_MODULE + devices: + - /dev/net/tun:/dev/net/tun + depends_on: [] diff --git a/models/orders.py b/models/orders.py index 946bd17..de0e91b 100644 --- a/models/orders.py +++ b/models/orders.py @@ -4,13 +4,23 @@ conn = sqlite3.connect("./files/rokky.db") cursor = conn.cursor() cursor.execute(""" -CREATE TABLE IF NOT EXISTS orders ( +CREATE TABLE IF NOT EXISTS products ( id INTEGER PRIMARY KEY AUTOINCREMENT, sku INTEGER UNIQUE, + product_type TEXT, product_id INTEGER, - email TEXT, - price TEXT, - content TEXT + name TEXT, + developer TEXT, + publisher TEXT, + cover TEXT, + release_date TEXT, + genres TEXT, + price TEXT, + price_gg TEXT, + price_sales TEXT, + price_salesgg TEXT, + gg TEXT, + insale TEXT ) """) diff --git a/nginx/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/826d0805fbbb9268ecf8b23b8c211217/meta.json b/nginx/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/826d0805fbbb9268ecf8b23b8c211217/meta.json new file mode 100644 index 0000000..6963c85 --- /dev/null +++ b/nginx/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/826d0805fbbb9268ecf8b23b8c211217/meta.json @@ -0,0 +1 @@ +{"creation_dt": "2026-03-19T08:29:34Z", "creation_host": "c9d15910341c"} \ No newline at end of file diff --git a/nginx/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/826d0805fbbb9268ecf8b23b8c211217/private_key.json b/nginx/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/826d0805fbbb9268ecf8b23b8c211217/private_key.json new file mode 100644 index 0000000..4f299c9 --- /dev/null +++ b/nginx/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/826d0805fbbb9268ecf8b23b8c211217/private_key.json @@ -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"} \ No newline at end of file diff --git a/nginx/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/826d0805fbbb9268ecf8b23b8c211217/regr.json b/nginx/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/826d0805fbbb9268ecf8b23b8c211217/regr.json new file mode 100644 index 0000000..7dffe93 --- /dev/null +++ b/nginx/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/826d0805fbbb9268ecf8b23b8c211217/regr.json @@ -0,0 +1 @@ +{"body": {}, "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/3159531281"} \ No newline at end of file diff --git a/nginx/certbot/conf/archive/wstkeys.top/cert1.pem b/nginx/certbot/conf/archive/wstkeys.top/cert1.pem new file mode 100644 index 0000000..3443f06 --- /dev/null +++ b/nginx/certbot/conf/archive/wstkeys.top/cert1.pem @@ -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----- diff --git a/nginx/certbot/conf/archive/wstkeys.top/cert2.pem b/nginx/certbot/conf/archive/wstkeys.top/cert2.pem new file mode 100644 index 0000000..d6dcf3a --- /dev/null +++ b/nginx/certbot/conf/archive/wstkeys.top/cert2.pem @@ -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----- diff --git a/nginx/certbot/conf/archive/wstkeys.top/chain1.pem b/nginx/certbot/conf/archive/wstkeys.top/chain1.pem new file mode 100644 index 0000000..d30d176 --- /dev/null +++ b/nginx/certbot/conf/archive/wstkeys.top/chain1.pem @@ -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----- diff --git a/nginx/certbot/conf/archive/wstkeys.top/chain2.pem b/nginx/certbot/conf/archive/wstkeys.top/chain2.pem new file mode 100644 index 0000000..d30d176 --- /dev/null +++ b/nginx/certbot/conf/archive/wstkeys.top/chain2.pem @@ -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----- diff --git a/nginx/certbot/conf/archive/wstkeys.top/fullchain1.pem b/nginx/certbot/conf/archive/wstkeys.top/fullchain1.pem new file mode 100644 index 0000000..3fd4c28 --- /dev/null +++ b/nginx/certbot/conf/archive/wstkeys.top/fullchain1.pem @@ -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----- diff --git a/nginx/certbot/conf/archive/wstkeys.top/fullchain2.pem b/nginx/certbot/conf/archive/wstkeys.top/fullchain2.pem new file mode 100644 index 0000000..e8b1d3f --- /dev/null +++ b/nginx/certbot/conf/archive/wstkeys.top/fullchain2.pem @@ -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----- diff --git a/nginx/certbot/conf/archive/wstkeys.top/privkey1.pem b/nginx/certbot/conf/archive/wstkeys.top/privkey1.pem new file mode 100644 index 0000000..5b239e4 --- /dev/null +++ b/nginx/certbot/conf/archive/wstkeys.top/privkey1.pem @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgorFGbpc7J0PQoiQ3 +1TLMzFZr5j6udFmO+ubn0sd0sfOhRANCAASvJAEPgDYZbHlQuMIxXOrdla00+z6m +fswl3EwOujDyJQZfDOIafH/DEGltyVlf9ikw0Qjc/RvPcRhj8AAWpL3c +-----END PRIVATE KEY----- diff --git a/nginx/certbot/conf/archive/wstkeys.top/privkey2.pem b/nginx/certbot/conf/archive/wstkeys.top/privkey2.pem new file mode 100644 index 0000000..c81efa0 --- /dev/null +++ b/nginx/certbot/conf/archive/wstkeys.top/privkey2.pem @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQghsi25k5YNZWoobY+ +5Em3YEW2JC0GBqGee2Z+DAX15QWhRANCAAQIuwOL1ldC3mFluNxMolg9j+Qh0MAy +AKqeu3i1XvwCcZ/7EiiVgD3qw9z5FENBageClPd777AfGo0ORPnAFp6B +-----END PRIVATE KEY----- diff --git a/nginx/certbot/conf/live/README b/nginx/certbot/conf/live/README new file mode 100644 index 0000000..00b733c --- /dev/null +++ b/nginx/certbot/conf/live/README @@ -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. diff --git a/nginx/certbot/conf/live/wstkeys.top/README b/nginx/certbot/conf/live/wstkeys.top/README new file mode 100644 index 0000000..5050078 --- /dev/null +++ b/nginx/certbot/conf/live/wstkeys.top/README @@ -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. diff --git a/nginx/certbot/conf/live/wstkeys.top/cert.pem b/nginx/certbot/conf/live/wstkeys.top/cert.pem new file mode 120000 index 0000000..fc5785f --- /dev/null +++ b/nginx/certbot/conf/live/wstkeys.top/cert.pem @@ -0,0 +1 @@ +../../archive/wstkeys.top/cert2.pem \ No newline at end of file diff --git a/nginx/certbot/conf/live/wstkeys.top/chain.pem b/nginx/certbot/conf/live/wstkeys.top/chain.pem new file mode 120000 index 0000000..f11c799 --- /dev/null +++ b/nginx/certbot/conf/live/wstkeys.top/chain.pem @@ -0,0 +1 @@ +../../archive/wstkeys.top/chain2.pem \ No newline at end of file diff --git a/nginx/certbot/conf/live/wstkeys.top/fullchain.pem b/nginx/certbot/conf/live/wstkeys.top/fullchain.pem new file mode 120000 index 0000000..70b24a5 --- /dev/null +++ b/nginx/certbot/conf/live/wstkeys.top/fullchain.pem @@ -0,0 +1 @@ +../../archive/wstkeys.top/fullchain2.pem \ No newline at end of file diff --git a/nginx/certbot/conf/live/wstkeys.top/privkey.pem b/nginx/certbot/conf/live/wstkeys.top/privkey.pem new file mode 120000 index 0000000..2b1d299 --- /dev/null +++ b/nginx/certbot/conf/live/wstkeys.top/privkey.pem @@ -0,0 +1 @@ +../../archive/wstkeys.top/privkey2.pem \ No newline at end of file diff --git a/nginx/certbot/conf/renewal/wstkeys.top.conf b/nginx/certbot/conf/renewal/wstkeys.top.conf new file mode 100644 index 0000000..2c86ce6 --- /dev/null +++ b/nginx/certbot/conf/renewal/wstkeys.top.conf @@ -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 diff --git a/nginx/conf.d/default.conf b/nginx/conf.d/default.conf new file mode 100644 index 0000000..7ad7d2d --- /dev/null +++ b/nginx/conf.d/default.conf @@ -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; + } +} diff --git a/services/__pycache__/__init__.cpython-313.pyc b/services/__pycache__/__init__.cpython-313.pyc index d4fdb0226e84afd369b73de7ad47372f21c9fa8b..463a4550ce034d0c98dde3c9ac871f41424cfad4 100644 GIT binary patch delta 26 gcmeBXtm692%ge<81W$iW6OX0AJh(fB*mh delta 43 xcmb>GX5{+J%ge<81d*>Ma+!!}>1X8Urs^l`2?dr697{v B4+;PP diff --git a/services/__pycache__/tim.cpython-313.pyc b/services/__pycache__/tim.cpython-313.pyc index ae28a50016192f3deefbfeef8e1fc914919aff04..2e9bae5d8d1d868b9e57fa9b0078c814a7138d78 100644 GIT binary patch delta 30 kcmeyv@|uPFGcPX}0}x!XIk=HKn~_ySKe3=-au4GN0FQVHqyPW_ delta 47 zcmaFO@`r`{GcPX}0}!;-@7>6q%_yd-pOK%Ns-KionyO!(UzDw%o|v0jJh__j0{~+& B5D@?X diff --git a/services/gg.py b/services/gg.py index b3d9c33..d07e806 100644 --- a/services/gg.py +++ b/services/gg.py @@ -212,9 +212,9 @@ def get_chats(page=1, pagesize=20, filter_new=None, email=None, id_ds=None): return r.json() -def get_product(): +def get_product(product_id): token = load_token() - product_id = 102182541 + # product_id = 102180432 url = f"https://seller.ggsel.com/api_sellers/api/products/{product_id}/data" @@ -229,10 +229,14 @@ def get_product(): r = requests.get(url, headers=headers, params=params) print(r.status_code) - return r.json() + prud = r.json() + name = prud["product"]["name"] + im = prud["product"]["preview_imgs"][0]["url"] + return name, im + # return r.json() -# print(get_product()) +# print(get_product(102184895)) def create_message(id_i: int): @@ -268,10 +272,91 @@ def create_message(id_i: int): } # пример вызова -create_message(18094706) +# create_message(18094706) + +def create_messagea(id_i: int, message): + print("SEND MESSAGE CALLED", id_i) + + token = load_token() + # message = "Спасибо за покупку в WST Keys" + + url = "https://seller.ggsel.com/api_sellers/api/debates/v2" + + params = { + "token": token, + "id_i": id_i + } + + payload = { + "message": message + } + + r = requests.post(url, params=params, json=payload) + + print("STATUS:", r.status_code) + + return r.text +# message = f"🔹Спасибо за покупку в WST Keys (West Store Trusted Keys)\n\n" +# create_messagea(22289522, message) # пример -# print(get_chats()) + +def get_chats_by_email(email): + token = load_token() + message = ( + f"" + +) + + url = "https://seller.ggsel.com/api_sellers/api/debates/v2/chats" + + params = { + "token": token, + 'email': email, + 'pagesize': 100, + 'page': 1 + } + + payload = { + "message": message + } + + r = requests.get(url, params=params) + print(r.text) + if r.status_code == 200: + return {"success": True} + + return { + "success": False, + "status": r.status_code, + "response": r.text + } + +# get_chats_by_email('fenomenplayerok@gmail.com') + + +def get_order_info(invoice_id: int, locale: str = "ru"): + token = load_token() + url = f"https://seller.ggsel.com/api_sellers/api/purchase/info/{invoice_id}" + + headers = { + "Accept": "application/json", + "locale": locale + } + + params = { + "token": token + } + + r = requests.get(url, headers=headers, params=params) + return r.json() # или r.text если нужен сырой ответ + +# # пример использования + +# invoice_id = 22228752 +# info = get_order_info(invoice_id) +# print(info) +# print(get_chats(email='fenomenplayerok@gmail.com')) # def tokens(): # timestamp = str(int(time.time())) @@ -313,4 +398,24 @@ create_message(18094706) # response = requests.get(url, params=params, headers=headers) # print(response.status_code) -# print(response.json()) \ No newline at end of file +# print(response.json()) + + +# def create_debate(order_id): +# token = load_token() +# url = "https://seller.ggsel.com/api_sellers/api/debates/v2" + +# params = { +# "token": token, +# "id_i": order_id +# } + +# json = { +# "message": "Спасибо за покупку в WST Keys" +# } + +# r = requests.post(url, params=params, json=json) +# return r.json() + + +# print(create_debate("22257737")) \ No newline at end of file diff --git a/services/mailer.py b/services/mailer.py index 68d0e7d..b068e6c 100644 --- a/services/mailer.py +++ b/services/mailer.py @@ -3,7 +3,7 @@ import smtplib from email.message import EmailMessage from dotenv import load_dotenv -from utils import build_items_html, build_keys_html, render_template +from services.utils import build_items_html, build_keys_html, render_template load_dotenv() diff --git a/services/send_mai.py b/services/send_mai.py index b77289d..46824b0 100644 --- a/services/send_mai.py +++ b/services/send_mai.py @@ -1,5 +1,8 @@ import sys -from mailer import send_plain_email, send_html_email +from services.mailer import send_plain_email, send_html_email +import sqlite3 +from datetime import datetime +from services.gg import create_messagea def read_multiline(prompt: str) -> str: @@ -24,43 +27,59 @@ def send_text_flow(): send_plain_email(to_addr, subject, body) -def send_html_flow(): - to_addr = input("Receiver email: ").strip() +def send_html_flow(ids): + # to_addr = input("Receiver email: ").strip() + + conn = sqlite3.connect("./files/rokky.db") + cursor = conn.cursor() + sku = ids + + cursor.execute(""" + SELECT * + FROM orders + WHERE orders_rokky = ? + """, (sku,)) + + rows = cursor.fetchall() + for row in rows: + print(row) + + + + s = row[9] + s = s.replace(" ", "+", 1) # только первое вхождение после времени + dt = datetime.fromisoformat(s) + dates = dt.strftime("%Y-%m-%d %H:%M:%S") data = { - "company_name": "wstkeys", - "order_id": "123", - "customer_name": "4321", - "currency": "USD", + # "company_name": "wstkeys", + "order_id": row[1], + # "customer_name": "4321", + "currency": row[7], "items": [ - {"name": "Game 1333", "quantity": 1, "price": 1330}, + {"name": row[3], "quantity": 1, "price": row[8]}, ], - "date": "23.03.2026 14:02", - "product_name": "Railroads Online - Pioneer DLC", - "product_image": "https://s3.ggsel.com/gsellers-imgs-prod/e05c8d1f28e18f56334bf8e7e9f7b547.jpeg", - "total_price": 20, - "key": 'XXXX-XXXX-YYY23', + "date": dates, + "product_name": row[3], + "product_image": row[4], + "total_price": row[8], + "key": row[13], "support_email": "wstkeys@gmail.com", "year": 2026 } - + to_addr = row[5] send_html_email(to_addr, data) + message = ( + + f"🔑 Ваш ключ: {row[13]}\n\n" + "📩 Копия ключа отправлена на вашу электронную почту.\n" + "💬 Если у вас возникнут вопросы — напишите нам.\n" + "⭐️ Нам очень важно ваше мнение, пожалуйста, оставьте отзыв." + ) + create_messagea(row[1], message ) + + conn.close() -def main(): - print("1 - Send plain email") - print("2 - Send HTML email") - - choice = input("Choose: ").strip() - - if choice == "1": - send_text_flow() - elif choice == "2": - send_html_flow() - else: - print("Invalid choice") - - -if __name__ == "__main__": - main() \ No newline at end of file +# send_html_flow(5388351) \ No newline at end of file diff --git a/services/test.py b/services/test.py new file mode 100644 index 0000000..51daa74 --- /dev/null +++ b/services/test.py @@ -0,0 +1,4 @@ +import requests + +ip = requests.get("https://api.ipify.org").text +print(ip) diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..b6fe92d --- /dev/null +++ b/start.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -e + +# Поднимаем WireGuard (игнорируем ошибки resolvconf) +wg-quick up ./wireguard/wg_confs/wg0.conf || true + +# Запускаем приложение +uv run main.py diff --git a/wg/coredns/Corefile b/wg/coredns/Corefile new file mode 100644 index 0000000..e26fbe6 --- /dev/null +++ b/wg/coredns/Corefile @@ -0,0 +1,6 @@ +. { + loop + errors + health + forward . /etc/resolv.conf +} diff --git a/wg/templates/peer.conf b/wg/templates/peer.conf new file mode 100644 index 0000000..d987dba --- /dev/null +++ b/wg/templates/peer.conf @@ -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} diff --git a/wg/templates/server.conf b/wg/templates/server.conf new file mode 100644 index 0000000..757682d --- /dev/null +++ b/wg/templates/server.conf @@ -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 diff --git a/wireguard/coredns/Corefile b/wireguard/coredns/Corefile new file mode 100644 index 0000000..e26fbe6 --- /dev/null +++ b/wireguard/coredns/Corefile @@ -0,0 +1,6 @@ +. { + loop + errors + health + forward . /etc/resolv.conf +} diff --git a/wireguard/templates/peer.conf b/wireguard/templates/peer.conf new file mode 100644 index 0000000..d987dba --- /dev/null +++ b/wireguard/templates/peer.conf @@ -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} diff --git a/wireguard/templates/server.conf b/wireguard/templates/server.conf new file mode 100644 index 0000000..757682d --- /dev/null +++ b/wireguard/templates/server.conf @@ -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 diff --git a/wireguard/wg0.conf b/wireguard/wg_confs/wg0.conf similarity index 100% rename from wireguard/wg0.conf rename to wireguard/wg_confs/wg0.conf