From b8624c94a1d65d79ffde3ee2e114143103dd1564 Mon Sep 17 00:00:00 2001 From: Oscar Cao Date: Sun, 19 Jan 2025 21:20:12 +0000 Subject: [PATCH] added beginnings of stripe payment for subscriptions --- .gitignore | 3 +- core/__pycache__/forms.cpython-312.pyc | Bin 0 -> 1291 bytes core/blueprints/__init__.py | 4 +- .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1365 bytes .../authentication.cpython-312.pyc | Bin 0 -> 4609 bytes .../__pycache__/main.cpython-312.pyc | Bin 0 -> 640 bytes .../__pycache__/stripe.cpython-312.pyc | Bin 0 -> 2220 bytes .../__pycache__/utils.cpython-312.pyc | Bin 0 -> 1765 bytes core/blueprints/stripe.py | 38 ++++++++++++++++++ database/__pycache__/database.cpython-312.pyc | Bin 0 -> 1804 bytes ui/static/checkout.js | 21 ++++++++++ ui/templates/base.html | 2 + ui/templates/checkout.html | 15 +++++++ 13 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 core/__pycache__/forms.cpython-312.pyc create mode 100644 core/blueprints/__pycache__/__init__.cpython-312.pyc create mode 100644 core/blueprints/__pycache__/authentication.cpython-312.pyc create mode 100644 core/blueprints/__pycache__/main.cpython-312.pyc create mode 100644 core/blueprints/__pycache__/stripe.cpython-312.pyc create mode 100644 core/blueprints/__pycache__/utils.cpython-312.pyc create mode 100644 core/blueprints/stripe.py create mode 100644 database/__pycache__/database.cpython-312.pyc create mode 100644 ui/static/checkout.js create mode 100644 ui/templates/checkout.html diff --git a/.gitignore b/.gitignore index 4e7f442..6566fd0 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -hls \ No newline at end of file +hls +venv/ \ No newline at end of file diff --git a/core/__pycache__/forms.cpython-312.pyc b/core/__pycache__/forms.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..402e8490568444d0534959ce3264faf8452dafe0 GIT binary patch literal 1291 zcmb_b&rcIU6rS03x4UhZ0{#e~DC%hwB_eXE%0=2rqSy#Vv({{u&bC?I?UvbAgv5vm z2NN&c;9tOcA)JhVf|nY4=_ZDQCvPU;r5ByI+ZIr{IfrlGd*AGvH{W~nS(c-St+&74 z6?Zv=zJb$OeB0O~%veVR5o{qFs~CgLS)3hGLv~mV+q}x#f-3m&kQK2-RkS5l!iYl| zM8d0x@CL4hf_!S!j|warITVd8iHh_cwkX(>(w6Q%Pdn6B!d`5)I&Yhmv}ss`ITdP_ zih&bN*}7>3ww%>nchRB5cNNZ)r%UB(<$Gjb!>KX|#z>Yr&y0K}mv_g z%eNZw$(2+yadzX$mc8xNC(?~XhVAGbuAdwG`0CT^FWE=+$MZYce0`EMdX1IoraZ7Q zup?i5lcqzR!;TD5_nqVz{lAB(+jeP*R|HSG>lDorbe+bb7#Sb|(8pj#iPC;>P5_() z==O-70{5UL&;mLDFbLpZ?F?AM9e@MeQ3n4~^e+MbPzkckC~;3Jz)RK^D+LPg--|E{ zdgqToP#uhnUzpe5CPxou*q<+deu7r})g7(4CEg4Mbdp|Rso)K{3WFaZjPX}=eivnS dP-YiR?1y=LX>D*HvCn=_h}qIl#6JGze*@n_GtU43 literal 0 HcmV?d00001 diff --git a/core/blueprints/__init__.py b/core/blueprints/__init__.py index 87a3b69..320dcde 100644 --- a/core/blueprints/__init__.py +++ b/core/blueprints/__init__.py @@ -3,7 +3,7 @@ from flask_session import Session from core.blueprints.utils import logged_in_user def create_app(): - app = Flask(__name__, template_folder="../../ui/templates/") + app = Flask(__name__, template_folder="../../ui/templates/", static_folder="../../ui/static") app.config["SECRET_KEY"] = "" app.config["SESSION_PERMANENT"] = False app.config["SESSION_TYPE"] = "filesystem" @@ -14,8 +14,10 @@ def create_app(): with app.app_context(): from core.blueprints.authentication import auth_bp from core.blueprints.main import main_bp + from core.blueprints.stripe import stripe_bp app.register_blueprint(auth_bp) app.register_blueprint(main_bp) + app.register_blueprint(stripe_bp) return app \ No newline at end of file diff --git a/core/blueprints/__pycache__/__init__.cpython-312.pyc b/core/blueprints/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e2f9252ff0027d835429edbbe2552db837f8723a GIT binary patch literal 1365 zcmah}&1(}u6rauRCY#Ndwpu}@9|}qo(-!q2qG*g@)mTg~ErD^Hoy67MY@C@;E3H%z z)Pr~t6#oOM-o1)PFAWw9i-Ce(yeT~hJ^5xg+i0=)l6~{u{NC5RH@hEGDIEd5yZyA* zi6Hb&1}ALvUS@NXaf4fxY{bii zFs{0`NvM|!pio7gUMl3T7pCy#!t_ONXQ@ysUAk7plZES7&lL;BDNnCjHevG&0(r?0 zo|>L4P*JY9Tt<`M#Ip?{ItJV;UyL(Otp*WFnu_bG`d58eU#KJI2^^B39^bOLw-N5AHla|qS|4gjq?{ym8Xc|442$0pED>Ko}}(A zQsLzaJAQoZ&El|yUs`hbT69Ist literal 0 HcmV?d00001 diff --git a/core/blueprints/__pycache__/authentication.cpython-312.pyc b/core/blueprints/__pycache__/authentication.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cffbdd43452d62d591d6deeacc2c8e005443a87c GIT binary patch literal 4609 zcmcgwUu+Y}8J}JMx7SIG^AD21a^NJU!9ak6LTJjL5CSBjIM+M5NbbfviS2m3x!LuR zSmp#0(gktV5vf&DsZ#R@;vV|QE4rtO7rPF!wc-@o-b>$ta!>cv`PLab3CT6$p`&OgFg6Aa68J;xs0-Pjp(+w7V*iqj5=#8~#`v$EG${Qn)*u zm`rD;uc|~bTsPIpL>h`g&Tw9lbZK1DFfG@mpdkuF(~)GuDrNL|)^SWT`x=(Pfic5+ zYcxDYu?_|6aaGo0uqu{Zv|ypXwFrGKAbs5{sOtB7D2I}O*pis1o^a$LMOe2q)7PZ^ z{knS`#X8@w-xkYLta*YrI^~zX1U$Y?bfPogVli@{ASN_dK+6=uDY%qPkDqg$%LKl3Ww<4 zb}(cuXFJ0o{Q#@g53-W%Vsl`580;Kk?X`S^odBzq-8uBFhs_|2g2G7lT6o~*z~wRV zhWGRo_z ztfNOvXB0}3sg!z`x}ir*XtyMy13_ZBM;uS6!JS<5+lx0p83>Er{XOEQzu)Th)$Oiib$5STiFXK*Y- zmBTrKspHf%Htd)Xm1u@tnx3ZeLg4Bco|vl8F{3aL0m>u}sBVa*RBfX{0@pX_B5=1z zD?IkW1Fi;Xrw@ad#|?WdLo_N$E;%zDtxQ^gB3q9JI#4}|KV7?W?#>vN6fvw$=yxT8 z#al#8(goa!X(vw}KYdiEjVDgriKztN8E4|C-2vC)w4R7bu+-4>tYNQsn1J5H7}^X~ znEU7lPt)VR`&Y^iPsy>r;Mo7#A-?suEL@nsQ1S-~{=l5G+|an-o_8*2pme2LSXkD{# zO_#Zq%Qs%0{qEeV1-bUTZRuF}a{fyS>AFzvAAB)IA+0yKl^fx|pM7OQny4M2Den=> zLc=%LA6+jA9R;DIBpfaXhx38+uZ6y{cW>Ssfac*x!zDp12x3X-DhOTq?u)O5OJ#4< z;@*FFKiU@1|62I;;LQS|rbh2B*sa(PP5wt};5+1c@fXW!z5r~0zz zRNi`Ojcx$S+K-usKL#%>!5IRPU;7umLmwChT%)AFos{ep2J9Bg>u_+)#HjY3C1*)` zSZyt@wp(-7Bn^4DCMwq(#kLv-)NoY`G$7DE-eE-zH9RYA8yxUVI;aF$el9qmV*E^R zVYYHM*#g>~7tu|YCS zwKxn0z>|gtbRmjo5}K|VE|@a?JekBADA2k}kZu6l%-NG(T0Ta9+R=4(Z+v|I=h=NT zq3_J#l%CV`lmNNTUzX2be(?)R&n<)8%HZhBneVc|;EnI>sG)6JZXH?{u9t4M@POMd~%&yqo($Xe--{Llv=wB zt=&(Xi>=4!hUiopJKnS(TDnneKmNp39eY_gNLhMusOay^3!Om8eNW|O&&j;?BsoIe zMnBl7AJvS$iIZU~O-{Z|3mZ8(x&9$dtE;JYD|P5+CLOlROftvr63giw;71Ibc?N@4 z^VpE16kCflo*{E?m3_8X=0`rJkk9B(gQIvKQ8(CxuZABCKOBAI@&9pfaj@8UxabMw ztpT(1NU+tgO{64kioiH*mOmrf*JcJ8<9emUDj9@t|XFcIouf&ZT4bJBnQIJN^)Ndd-6PldDi#y-xpE z;xbV)OM$1&O9udT;vL_~odQ(vDwI}lRZ+7=Zf}{Zf5-D&Cjc7YvG1LgzM9kiFM+D4 AEdT%j literal 0 HcmV?d00001 diff --git a/core/blueprints/__pycache__/main.cpython-312.pyc b/core/blueprints/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ad7799810f0a29da2881a1ae1a65deba60905b4 GIT binary patch literal 640 zcmYLH&ubJh6iza;v%6Dkg?bRAkb{Q~=;~66BBcj^fF}{!(=srmGuiFb$z(_}t=m%t zK@SSv+J8azPw7S2+gwCEd8@3aJ^7OE;)A@rH+kRpy}Zoj>S~C!@O><+kdWEKJ-ftO-?z*SSv;--@%B@;YJnzrRj4yvZ5WNo;07o+q Kk=rhEl>Y!k*`Fo= literal 0 HcmV?d00001 diff --git a/core/blueprints/__pycache__/stripe.cpython-312.pyc b/core/blueprints/__pycache__/stripe.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8dd2cb295bef3ea1cf4a16cae0e4589d1d269fd2 GIT binary patch literal 2220 zcmb_dO>7fK6rS1j`giSsLudpl7(!K6Bsh*qf~pdl(lkhI62SQ(R-~1^JBio!+Gcj0 z;E15KLMl~@N>8CurRE4qq;l+)b1$)ijC>FHY z$|!LgCe})bEu*W8@Vujc@QVB zTva}uEcEnc(q=3-zSvutn4HSx;#V%`^X4E<4_?(L_1x^x#fhH9*o92*SbDy@d%8Pb z9FO(%FSbV&jA(9MN(L#pV%h96kYQ-W0&!g$ON>j9cywfDimIVBOAUaBzVP(f`GZa? zzz59T-E0H3T?G}g4g>Zmvn<9NLxn0g2UT8mslty;a;u(o?;7P38%w}!u_XX*fb2d; zZm#RTHE6#jKnE~)8FK>Q$PzRIj^z#L*g;?h|E*QHY0AbWcoQZX>jGQ=*ZFC%044t@ z@ghBqR28YjrKGS*j!;k)Bs085FEsJ$)04AtRUdi5l9D(gSZ2g~t(+>Dnpq*DQBE5Q zMcrf-7Yb+|VM!pKvL@?A6_Ep_R7FPxQ?@aX%}NOw#Gls+NY*H=4C1ov4q~Kg7%8S) zEXYcc(haeQ6g^SNYcxOtQJ781hgs2y*8!V&5)HK7HVuex=(>U$>DWx=DJ`*^xdrW5 zvSA0~h{xdyLOtX!YOryo>;`b=6ag z^j0Iij{|)huD-us`heK>C*Wv!Z}4{NTkn&W@ZH!q^LK)O*9EG5WxPu>_%c2i0FMH` z!881$18sv*{*eTk92Mxi*b;4|-DQ|5vuqH4cxe2!7Gk8fTIe|yR{p03YEnLHUB@)^ zo{`<9dQ++Hwt~|V|J`P^`NGWzj+8y%NX>PfbFSkAkoZyJZ&XFrRN4>p#*<7U4GI%bAzZ?5{tR{9;#g3ZTSrt3ir+%J!FjMO~ zSM56YOMbKKvrX~y<@cZa_TBUR6#60baG};eR_!0F^-om$Cm#DIH@L|i8VfA?q7IK= z1D^qJf!|IA3V!3(0`$-5z(5PejV=Zq_tP0u&r1+9uLl5k)5ZE2yGpE7tUnBfF#UqS zp?l{y1E)4zrz}e;NQBvZ%E(#n*u|V#CGGOrcY-VzQaX}l;W&O-=)0|T32;28-1F1Fpxta>*^ zY1#L5|IKChtqDLdN}*=>hjS|IIzuyVgC*fxbt-;)lUL0VA~wOKXHGU n*__$tcsK=_QE%N6>;8t--NUQp)j4K#dYgl=li5Tq$;$R0rw0st literal 0 HcmV?d00001 diff --git a/core/blueprints/__pycache__/utils.cpython-312.pyc b/core/blueprints/__pycache__/utils.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ed7cf5e313b2ac0dba92a66e6df1c2972234847 GIT binary patch literal 1765 zcmb_c&2Jk;6rb4-d-LIhHWUJF=^_l38;B?+O@%5)L5SRBQNmm4G?clQXLO2S+$J9JXh1?*qM=sOLcOGiM#%`xl1Xt+3o>E0 zlm%OFk&@*ZfCHWhIJlN6WdFcm1v9ZY^L)-+nPeM0s8nN~WI6k=!Gug`Ey)Tdgdaz{ zG%;7Xvm)GH5=t3>kR|Cf0d5mXK`B{Ib4`DM_NYhpdjBP^R8qn9N}g!-ahx?$(B>1X zAsCOGkQGdxg{X;MW0GgkGH@y}9WV5wUDClVAI`kixG zu3UM2>NN?ImoJyyn6vWDputwSA4ySeNIwvhD{IL}5Z7wVtN2j`!}HS+6;l$g05r*A z?&+6ZqNm&!TPM@dA1{MAssI5xN7sbA(^mOKVWb^%u?79W1cNz z`zEuy2eADJ$ByelyWMWYE@JI2z}MLT_?kkKyZ-@CYH~9#&D23+2b6eJTB*IP2%e6* z`a3NpMtZyjqLH??L42}7zolQ{(e(MmglwUEG%+Ifu`Fa%XL$~Sa4ZSpn9?CdvlJ99r={Bh#@iJ#9E55{Kphi85r9lN!-Kbqfu@9t=R z-^#0Ab1cQK#?OJ`=P?*wiudhqLdYm!Q#RvZrjPs8N;EE8e z1P;h=ZX@6eGhY}=%xd6>`aiBp_YSGYa-iCXTp7oK-~+f0Uo%BO6_1amu@qAuTGzwa qYXq#w@v*~aNg$h#bV})ca_tv#?H)P%z|iQc53DR5@0j50izd!k4LIC)cCc%)pPUkW@Eik}fCCK_;mSqCG35Ku+hPaDJ8d;&v zGSYA4&gIAkqq`2B*D%ro6SB;}Y(p``H7P3^%#@1WJ_3OM%?pNv>k&gle4%7&nk#C?!VYsK+brd6`nUAa%a3sz-$IOP3bYbxO<(4YYEiyJrBZ+_|AUb?lk7r)$;_EVQ`Pu`krO24Rs z?c`8X`n0E=NVZa&sV_#Fk#;=U?BnMUdrAf3#Z#eyP79)dOrv*p6e;J-2v}lJho`{_ z8GZ(M5)}z=QiBCLF}RM8%nJL6)w|ystHF|Z9cqkU!15W158(&Nv&!Xy<3`_D%9&MS z#g(hPP;oMXPbV{Ny6*vty?(w%9ld1#tu%z}XwAI)~&w9^8b@0AA z_&^=@ngEHUOE8y-(v7D#1>ce$O)Fc*qW7-EH0{QsUh-FX0&_XlbR(~Oea)Ys$R#q* zqS*njs<%&0o!}XAY|2@Kj=<#i*+E2>FMczzJ-s#E0dx=hB{}(fjL9hM-cr(I>%CnfX0LU0|jbgH2?qr literal 0 HcmV?d00001 diff --git a/ui/static/checkout.js b/ui/static/checkout.js new file mode 100644 index 0000000..ea934a2 --- /dev/null +++ b/ui/static/checkout.js @@ -0,0 +1,21 @@ +const stripe = Stripe("pk_test_51QikGlGk6yuk3uA8MT3uQrPMpUqJlKzkxfbrfrd34yXolWSbJYEFWm674s2aUydZyjjS0W2oByEJTV0LXMs1pWTk002ioHxQl6"); + +initialize(); + +// Create a Checkout Session +async function initialize() { + const fetchClientSecret = async () => { + const response = await fetch("/create-checkout-session", { + method: "POST", + }); + const { clientSecret } = await response.json(); + return clientSecret; + }; + + const checkout = await stripe.initEmbeddedCheckout({ + fetchClientSecret, + }); + + // Mount Checkout + checkout.mount('#checkout'); +} \ No newline at end of file diff --git a/ui/templates/base.html b/ui/templates/base.html index 5ddd280..99a6f02 100644 --- a/ui/templates/base.html +++ b/ui/templates/base.html @@ -4,6 +4,8 @@ Live Stream + {% block header_config %} + {% endblock %} {% block main_content %} diff --git a/ui/templates/checkout.html b/ui/templates/checkout.html new file mode 100644 index 0000000..d878fa9 --- /dev/null +++ b/ui/templates/checkout.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} + +{% block header_config %} + + + + +{% endblock %} + +{% block main_content %} + +
+ +
+{% endblock %} \ No newline at end of file